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

无法修改JSON文件时,如何处理JSON空值引发的Python解析错误?

解决无法修改的不规范JSON文件读取问题

作为Python新手,我尝试读取一个包含不规范内容的test.json文件,文件内容如下:

{ "empty_char":"", "empty_number": , "char":"i'm a char", "number":0 }

我用这段代码读取:

import json
with open('test.json') as f:
    data = json.load(f)

结果抛出了这个错误:

Traceback (most recent call last):
  File "<input>", line 2, in <module>
  File "C:\ProgramData\Anaconda3\Lib\json\__init__.py", line 299, in load
    parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
  File "C:\ProgramData\Anaconda3\Lib\json\__init__.py", line 354, in loads
    return _default_decoder.decode(s)
  File "C:\ProgramData\Anaconda3\Lib\json\decoder.py", line 339, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\ProgramData\Anaconda3\Lib\json\decoder.py", line 357, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 3 column 19 (char 39)

后来发现问题出在"empty_number": ,这行——这是不规范的JSON空值写法,可我没办法修改这个JSON文件,该怎么解决这个错误呢?


别担心,这种情况在处理第三方提供的JSON文件时很常见,我们可以通过预处理内容或者使用容错解析工具来解决,给你几个实用的方案:

方法一:简单字符串替换(适合单一不规范场景)

如果你的JSON里只有key: ,这种固定格式的不规范空值,直接用字符串替换就能搞定,把不合法的: ,替换成JSON标准的: null,:

import json

with open('test.json', 'r', encoding='utf-8') as f:
    # 先读取文件全部内容
    raw_content = f.read()
    # 替换不规范的空值写法
    corrected_content = raw_content.replace(': ,', ': null,')
    # 解析修正后的合法JSON
    data = json.loads(corrected_content)

print(data)

要是你的JSON里冒号和逗号之间有空格(比如"empty_number": ,),只要把替换的字符串改成: ,就行,灵活调整一下就好。

方法二:正则表达式替换(适配多种不规范格式)

如果不规范的写法有多种形式(比如冒号后有空格、换行、制表符等),用正则表达式能更精准地匹配并修正:

import json
import re

with open('test.json', 'r', encoding='utf-8') as f:
    raw_content = f.read()
    # 匹配所有"键名": 后面直接跟逗号的情况,替换成"键名": null,
    # \s*匹配任意数量的空白字符(空格、换行、制表符都算)
    corrected_content = re.sub(r'("[\w_]+"):\s*,', r'\1: null,', raw_content)
    data = json.loads(corrected_content)

print(data)

这个正则能覆盖绝大多数类似的空值不规范写法,适用性更强。

方法三:使用容错JSON解析库(适合大量不规范内容)

如果你的JSON文件除了空值问题还有其他不规范的地方(比如无引号的键、末尾逗号等),可以试试第三方的容错解析库,比如json5:
首先安装库:

pip install json5

然后用下面的代码读取文件:

import json5

with open('test.json', 'r', encoding='utf-8') as f:
    data = json5.load(f)

print(data)

json5支持很多JSON标准不允许的语法,专门用来处理这种“不标准”的JSON文件,省心又省力。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:32:44