OpenAI返回JSON解析失败,如何将不规范JSON转为字典?
如何将不规范的OpenAI JSON响应转换为字典?
错误原因
你的示例中,response字段里的JSON存在不符合规范的内容:"issue_start_time": ISO 8601 string里的ISO 8601 string是未被双引号包裹的字符串,而JSON要求所有字符串必须用双引号括起来,这直接导致json.loads解析失败。
解决方案
方案1:正则修正不规范内容
通过正则表达式定位并修正未加引号的字符串部分,再用标准JSON解析:
import re import json # 假设data是你拿到的原始响应字典 raw_response = data["response"] # 替换冒号后未加引号的字母数字空格组合(适配示例中的情况) corrected_response = re.sub(r'(?<=: )([A-Za-z0-9 ]+)(?=,|\s*})', r'"\1"', raw_response) # 解析修正后的JSON parsed_dict = json.loads(corrected_response)
如果AI返回的不规范内容有其他模式,可以调整正则表达式匹配规则。
方案2:使用宽松的JSON解析库
json5库支持解析非严格格式的JSON(包括未加引号的字符串、单引号键等),适合处理AI生成的不规范响应:
- 先安装库:
pip install json5
- 解析代码:
import json5 parsed_dict = json5.loads(data["response"])
方案3:使用ast.literal_eval安全解析
ast.literal_eval可以解析Python字面量结构,先处理转义字符和不规范字符串后再解析:
import ast processed_response = data["response"].replace(""", '"') # 修正示例中的未加引号字符串 processed_response = processed_response.replace("ISO 8601 string", '"ISO 8601 string"') parsed_dict = ast.literal_eval(processed_response)
内容的提问来源于stack exchange,提问作者GoneCase123
相关产品推荐
相关产品推荐

