Par exemple, chaîne :
user_info = '{"name" : "john", "gender" : "male", "age": 28}'
Nous souhaitons la convertir dans le dictionnaire suivant :
user_dict = {"name" : "john", "gender" : "male", "age": 28}
Il existe plusieurs méthodes :
1. Convertir via json
>>> import json >>> user_info= '{"name" : "john", "gender" : "male", "age": 28}' >>> user_dict = json.loads(user_info) >>> user_dict {u'gender': u'male', u'age': 28, u'name': u'john'}
Mais il existe un problème potentiel lors de l'utilisation de json pour la conversion.
La syntaxe JSON stipule que les chaînes dans les tableaux ou les objets doivent utiliser des guillemets doubles, les guillemets simples ne peuvent pas être utilisés (il y a une description sur le site officiel : "Une chaîne est une séquence de zéro ou plusieurs caractères Unicode, enveloppés dans guillemets doubles, en utilisant des barres obliques inverses" ). Par conséquent, la conversion suivante est erronée :
>>> import json >>> user_info = "{'name' : 'john', 'gender' : 'male', 'age': 28}" # 由于字符串使用单引号,会导致运行出错 >>> user_dict = json.loads(user_info) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 339, in loads return _default_decoder.decode(s) File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 364, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 380, in raw_decode obj, end = self.scan_once(s, idx) ValueError: Expecting property name: line 1 column 2 (char 1)
2. La conversion via eval
>>> user_info = '{"name" : "john", "gender" : "male", "age": 28}' >>> user_dict = eval(user_info) >>> user_dict {'gender': 'male', 'age': 28, 'name': 'john'} >>> user_info = "{'name' : 'john', 'gender' : 'male', 'age': 28}" >>> user_dict = eval(user_info) >>> user_dict {'gender': 'male', 'age': 28, 'name': 'john'}
n'a pas le problème d'utiliser json pour convertir ci-dessus. Cependant, l'utilisation d'eval pose des problèmes de sécurité.
3. Utilisez ast.literal_eval pour la conversion via literal_eval
>>> import ast >>> user = '{"name" : "john", "gender" : "male", "age": 28}' >>> user_dict = ast.literal_eval(user) >>> user_dict {'gender': 'male', 'age': 28, 'name': 'john'} user_info = "{'name' : 'john', 'gender' : 'male', 'age': 28}" >>> user_dict = ast.literal_eval(user) >>> user_dict {'gender': 'male', 'age': 28, 'name': 'john'}
Il n'y a ni le problème de l'utilisation de json pour la conversion, ni le problème de sécurité de l'utilisation de eval pour la conversion, il est donc recommandé d'utiliser ast.literal_eval.
Pour plus d'articles techniques liés à Python, veuillez visiter la colonne Tutoriel Python pour apprendre !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!