使用HJSON解析类JSON数据时仅整数与null可正常解析报错问询
问题根因
你遇到的报错不是漏了配置,是Python的HJSON库对无引号值的解析遵循严格的HJSON规范,具体约束如下:
- HJSON仅内置识别3种无引号字面量:
null、true、false,数值类型(整数、浮点数)也支持无引号写法 - 其他无引号内容如果要识别为字符串,要么加单/双引号包裹,要么符合「无引号字符串不能与内置关键字冲突、不能包含特殊符号」的规则,你用到的
yes、None都不属于内置合法字面量,也没有加引号,因此触发解析错误 - 报错信息误导是HJSON解码器本身的实现bug:解析值出错时错误将异常定位到键名扫描阶段,和实际问题不符
解决方案
方案1:调整输入格式(可修改输入内容时优先选)
所有非数值、非null/true/false的值都用引号包裹即可正常解析:
import hjson # 调整后可正常运行 working = hjson.loads('{ date_closed: "yes" }') print(working) # 输出 OrderedDict([('date_closed', 'yes')])
如果要表示布尔值请用标准的true/false,表示空值用null,不要用yes/no/None等非标准写法。
方案2:更换兼容更强的解析库(无法修改输入内容时用)
如果输入内容无法调整,推荐用demjson3库,它对非标准JSON的兼容性远高于HJSON,无需修改输入即可正常解析:
import demjson3 # 解析你给出的异常示例均正常运行 print(demjson3.decode('{ date_closed: yes }')) # 输出 {'date_closed': 'yes'} print(demjson3.decode('{ date_opened: None }')) # 输出 {'date_opened': None}
安装命令:pip install demjson3
内容的提问来源于stack exchange,提问作者alphaomega
相关产品推荐
相关产品推荐

