You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Python3中使用格式不规范的JSON文件

处理不规范类JSON格式的Python解决方案

这种半结构化的"伪JSON"确实挺闹心的——标准json模块对格式要求极其严格,哪怕少个引号或者多个末尾逗号都会直接报错。不过针对你描述的场景(字符串值未加双引号,还可能存在末尾多余逗号),有两种可靠的处理方式:

方案1:用正则预处理修复格式(仅依赖标准库)

既然核心问题是字符串值没有被双引号包裹,我们可以先用正则表达式把这些值补上引号,再交给标准json模块解析。这个方法不用装额外库,适合轻量场景。

代码示例:

import re
import json

# 读取你的不规范文件
with open("your_funky_json.txt", "r", encoding="utf-8") as f:
    raw_text = f.read()

# 正则规则:匹配冒号后、非数字/非引号开头的内容,直到逗号或大括号结束
# 适配你的场景:只给未加引号的字符串值加双引号
fixed_text = re.sub(
    r'(?<=: )(?!["\'\d])([^,}]+)',  # 匹配目标内容
    r'"\1"',  # 替换为带双引号的格式
    raw_text
)

# 处理可能存在的末尾多余逗号(比如你示例里AAA后面的逗号)
fixed_text = re.sub(r',\s*([}\]])', r'\1', fixed_text)

# 现在可以正常解析了
try:
    parsed_data = json.loads(fixed_text)
    print("解析成功!")
    print(parsed_data["Apparel"]["XX"])  # 测试访问数据
except json.JSONDecodeError as e:
    print(f"解析失败,错误位置:{e.pos},原因:{e.msg}")

注意点:

  • 这个正则假设你的值里没有逗号或大括号,如果有特殊场景(比如值包含逗号),需要调整正则规则;
  • 额外加了处理末尾多余逗号的逻辑,因为你示例里最后一个键值对后面有逗号,这也是标准JSON不允许的。

方案2:使用容错第三方解析库(更省心)

如果你的文件还有其他不规范情况(比如单引号、注释、无引号键),用专门的容错解析库会更靠谱。推荐json5——它支持JSON5规范(一种更宽松的JSON超集),完美适配这类不规范格式。

步骤:

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

# 直接读取并解析,无需预处理
with open("your_funky_json.txt", "r", encoding="utf-8") as f:
    parsed_data = json5.load(f)

# 正常使用解析后的数据
print(parsed_data["Apparel"]["TT"]["3"])

优势:

  • 自动处理无引号字符串、末尾多余逗号、单引号、注释等多种不规范情况;
  • 用法和标准json模块几乎一致,学习成本低。

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

火山引擎 最新活动