如何为JSON未带双引号的属性名添加双引号以支持json.loads正常解析
报错原因
你当前拿到的字符串不符合JSON语法规范:JSON强制要求所有属性名必须用双引号包裹,而你现有字符串的fruit1/fruit2/fruit3等键名没有双引号,因此json.loads无法正常解析。
解决方法
方案:正则替换补全键名双引号后解析
通过正则匹配所有符合规则的键名,给它们补全双引号,生成标准JSON字符串后即可用json.loads解析:
import re import json # 你通过split方法得到的原始字符串 raw_str = '{fruit1:"Apple",fruit2:"Orange",fruit3:"Pear"}' # 正则匹配{或,后的键名,补全双引号,避免匹配到值内的xxx:格式内容 standard_json_str = re.sub(r'([{,]\s*)(\w+)(\s*:)', r'\1"\2"\3', raw_str) # 解析为Python字典 food = json.loads(standard_json_str) print(food['fruit1']) # 输出:Apple
注意事项
你示例的预期代码中直接对字符串类型的food用键名索引是错误的,字符串仅支持数字索引,必须先解析为Python字典后,才能用键名取值。
内容的提问来源于stack exchange,提问作者curtcab
相关产品推荐
相关产品推荐

