Python解析含布尔值的类JSON字符串时遇JSONDecodeError问题
解决类JSON字符串解析的JSONDecodeError问题
报错原因
你遇到的JSONDecodeError是因为JSON规范要求布尔值必须是小写的true/false,但你的类JSON字符串里是Python风格的大写True/False。仅替换单引号为双引号后,字符串中的True/False不符合JSON语法,导致解析失败。
解决方案
方法1:使用ast.literal_eval解析(推荐)
ast.literal_eval可以安全解析Python字面量格式的字符串,支持单引号和大写布尔值,之后再将布尔值转为字符串即可:
import ast str_json = "{'name': 'bob', 'id': '11111', 'happy': True, 'sad': False}" # 解析为Python字典 parsed_dict = ast.literal_eval(str_json) # 遍历字典,将布尔值转为字符串 result = { key: str(value) if isinstance(value, bool) else value for key, value in parsed_dict.items() } print(result) # 输出: {'name': 'bob', 'id': '11111', 'happy': 'True', 'sad': 'False'}
方法2:先替换布尔值再解析JSON
先将字符串中的True/False替换为带双引号的字符串,再替换单引号为双引号,最后用json.loads解析:
import json str_json = "{'name': 'bob', 'id': '11111', 'happy': True, 'sad': False}" # 替换Python布尔值为JSON兼容的字符串形式 processed_str = str_json.replace('True', '"True"').replace('False', '"False"') # 替换单引号为双引号 processed_str = processed_str.replace("'", '"') # 解析JSON result = json.loads(processed_str) print(result) # 输出: {'name': 'bob', 'id': '11111', 'happy': 'True', 'sad': 'False'}
内容的提问来源于stack exchange,提问作者Omer Itzhak
相关产品推荐
相关产品推荐

