たとえば、文字列:
user_info = '{"name" : "john", "gender" : "male", "age": 28}'
これを次の辞書に変換したいとします:
user_dict = {"name" : "john", "gender" : "male", "age": 28}
いくつかの方法があります:
1. 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'}
ただし、変換に json を使用すると潜在的な問題が発生します。
JSON 構文では、配列またはオブジェクト内の文字列には二重引用符を使用する必要があり、一重引用符は使用できないと規定されています (公式 Web サイトには次の説明があります。「文字列は、ラップされた 0 個以上の Unicode 文字のシーケンスです)」バックスラッシュエスケープを使用して二重引用符で囲みます。)。したがって、次の変換は間違っています:
>>> 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. 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'}
による変換には、上記の変換に json を使用するという問題はありません。ただし、eval の使用にはセキュリティ上の問題があります。
3. ast.literal_eval を使用して変換すると、json を使用して変換する場合の問題や、eval を使用して変換する場合のセキュリティの問題がないため、ast.literal_eval を使用することをお勧めします。
Python 関連の技術記事の詳細については、
Python チュートリアル以上がPythonで文字列を辞書に変える方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。