You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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生成的不规范响应:

  1. 先安装库:
pip install json5
  1. 解析代码:
import json5

parsed_dict = json5.loads(data["response"])

方案3:使用ast.literal_eval安全解析

ast.literal_eval可以解析Python字面量结构,先处理转义字符和不规范字符串后再解析:

import ast

processed_response = data["response"].replace("&quot;", '"')
# 修正示例中的未加引号字符串
processed_response = processed_response.replace("ISO 8601 string", '"ISO 8601 string"')
parsed_dict = ast.literal_eval(processed_response)

内容的提问来源于stack exchange,提问作者GoneCase123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 15:27:18