如何在Python中将类JSON字符串转换为字典?
解决方法
首先你的原始字符串本身有语法错误,这是导致转换失败的核心原因:key1对应的是{ [ ... ] },这既不是合法的JSON对象(对象必须是键值对,不能直接放数组),也不是合法的Python字典格式。得先把这个错误修正:
- 如果
key1的值就是那组数组,把{ [ ... ] }改成[ ... ],修正后的字符串应该是:
'''{ 'key': 'value', 'key1': [ { 'one': 'hi' }, { 'two': 'hi' } ] }'''
- 如果
key1是个对象,里面要给数组加个键,比如改成:
'''{ 'key': 'value', 'key1': { 'items': [ { 'one': 'hi' }, { 'two': 'hi' } ] } }'''
修正语法后,用下面两种方法转字典:
方法1:用ast.literal_eval(推荐,比eval安全)
Python的ast模块里的literal_eval可以安全解析Python字面量,支持单引号的字典格式:
import ast str_data = '''{ 'key': 'value', 'key1': [ { 'one': 'hi' }, { 'two': 'hi' } ] }''' result_dict = ast.literal_eval(str_data) print(result_dict['key1'][0]['one']) # 输出 hi
方法2:修正引号后用json.loads
JSON要求必须用双引号,所以先把单引号替换成双引号,再用json.loads:
import json str_data = '''{ 'key': 'value', 'key1': [ { 'one': 'hi' }, { 'two': 'hi' } ] }''' # 替换单引号为双引号 json_str = str_data.replace("'", '"') result_dict = json.loads(json_str) print(result_dict['key1'][0]['one']) # 输出 hi
之前你替换引号后报错,就是因为原始字符串里的key1那部分语法错误,修正后就能正常解析了。
内容的提问来源于stack exchange,提问作者Dshiz
相关产品推荐
相关产品推荐

