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

Python加载含None值的类字典字符串报JSONDecodeError的解决方法

报错原因

标准JSON规范规定空值的固定写法为null,不支持Python原生的None关键字,因此直接调用json.loads()解析形如'{"a": None}'的Python风格类字典字符串时,会抛出JSONDecodeError: Expecting value: line 1 column 7 (char 6)异常。

常用解决方法
  • 方法1:字符串替换适配标准JSON(简单场景适用)
    加载前先将字符串中的None替换为JSON标准的null,再走正常JSON解析流程即可:

    import json
    
    s = '{"a": None}'
    parsed_data = json.loads(s.replace("None", "null"))
    print(parsed_data)  # 输出结果: {'a': None}
    

    注意:如果字符串本身的内容值里包含None文本(例如'{"tip": "None means no value"}'),简单替换会篡改原有内容,这类场景不推荐用该方法。

  • 方法2:使用ast.literal_eval安全解析(推荐首选)
    这类字符串本身完全符合Python原生字面量语法,直接用Python标准库ast的literal_eval方法即可解析,原生支持识别None、True、False等Python内置值,且不会执行任意代码,没有eval()的注入风险:

    import ast
    
    s = '{"a": None}'
    parsed_data = ast.literal_eval(s)
    print(parsed_data)  # 输出结果: {'a': None}
    print(type(parsed_data["a"]))  # 输出结果: <class 'NoneType'>
    

    该方法是处理此类Python风格类字典字符串的最优方案,无需提前做字符串替换,同时支持解析列表、元组、数字、字符串等常见Python字面量结构。禁止直接使用eval()做解析,避免恶意代码执行风险。

  • 方法3:兼容非标准JSON的第三方库(复杂场景适用)
    如果待解析的字符串还夹杂其他非标准JSON写法(比如单引号包裹键值、末尾多余逗号等),可以使用兼容宽松语法的JSON解析库处理:

    # 先安装依赖:pip install demjson3
    import demjson3
    
    s = '{"a": None}'
    parsed_data = demjson3.decode(s)
    print(parsed_data)  # 输出结果: {'a': None}
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 05:49:19