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

如何将格式错误的类JSON数据转换为合法JSON用于Python代码?

将类JSON转换为合法JSON的Python方法

下面是几种解决这类非标准JSON解析问题的Python方法,涵盖内置模块、第三方库和手动处理方案:

1. 用内置ast模块(无需额外安装)

这类类JSON结构和Python字典几乎一致,ast.literal_eval可以安全解析成Python字典,再转成标准JSON。它比eval更安全,不会执行恶意代码。

import ast
import json

# 替换成你获取的类JSON字符串
raw_data = '''{
  product_id: 11,
  user_id: 44,
  data: {
    "Wood shear wall design": {
      "Height of wall": { value: "4", unit: "ft" },
      "Length of wall": { value: "4", unit: "ft" },
      "Shear force": { value: "1000", unit: "lb" },
      "sheathing grade": {
        value: '{"id":1136,"item":"Sheathing","section_product_item":"30_77"}',
        unit: "N/A",
      },
      "sheathing material": {
        value: '{"id":1137,"item":"OBS","section_product_item":"30_77"}',
        unit: "N/A",
      },
      "sheathing type": {
        value: '{"id":1138,"item":"3\/8","section_product_item":"30_77"}',
        unit: "N/A",
      },
      "stud size": {
        value: '{"id":1139,"item":"2_3","section_product_item":"30_77"}',
        unit: "N/A",
      },
      "number of nails": { value: "1", unit: "N/A" },
      "stud type": {
        value: '{"id":1143,"item":"6d","section_product_item":"30_77"}',
        unit: "N/A",
      },
      "nail spacing": {
        value: '{"id":1144,"item":"2","section_product_item":"30_77"}',
        unit: "ft",
      },
      "modulus of elasticity": { value: "1", unit: "psf" },
      "HD capacity": { value: "1", unit: "lb" },
      "HD deflection": { value: "1", unit: "in" },
      "number of opening": {
        value: '{"id":1149,"item":"0","section_product_item":"30_77"}',
        unit: "N/A",
      },
    },
  },
  type: 1,
  number_of_projects: 1,
}'''

# 解析为Python字典
parsed_dict = ast.literal_eval(raw_data)
# 转换为合法JSON字符串
valid_json = json.dumps(parsed_dict, indent=2)
print(valid_json)

2. 用json5库

JSON5是JSON的超集,天生支持无引号键、单引号字符串等宽松语法,专门适配这类JS对象风格的数据。

先安装库:

pip install json5

代码示例:

import json5

# 使用上述raw_data字符串
parsed_data = json5.loads(raw_data)
valid_json = json5.dumps(parsed_data, indent=2)
print(valid_json)

3. 用demjson库

demjson的解码方法原生支持非严格JSON格式,能自动处理未加引号的键和单引号问题。

先安装库:

pip install demjson

代码示例:

import demjson

parsed_data = demjson.decode(raw_data)
valid_json = demjson.encode(parsed_data, indent=2)
print(valid_json)

4. 手动正则替换(适合简单场景)

如果不想依赖第三方库,可通过正则修正语法问题:给无引号的键加双引号,替换字符串的单引号为双引号。

import re
import json

# 给未加引号的键添加双引号
pattern = re.compile(r'(\w+):')
fixed_data = pattern.sub(r'"\1":', raw_data)
# 替换包裹字符串的单引号为双引号
fixed_data = fixed_data.replace("'", '"')

# 解析并转成标准JSON
parsed_data = json.loads(fixed_data)
valid_json = json.dumps(parsed_data, indent=2)
print(valid_json)

注:正则方案适合结构简单的场景,复杂嵌套或特殊字符可能需要调整正则规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 19:18:19