Python中json与json5处理Surrogate Pair不一致,是否为Bug?
JSON与JSON5处理Surrogate Pair的差异疑问
测试代码
#!/opt/homebrew/bin/python3 #-*-coding:utf8-*- #python version 3.11.4 import json5 import json d = json5.loads('{"\ud83d\ude03": "ok"}') print(d) # output: {'😃': 'ok'} d = json.loads('{"\ud83d\ude03": "ok"}') print(d) # output: {'😃': 'ok'}
问题
运行上述代码后,若json与json5包处理Surrogate Pair的结果存在差异,请问这属于Bug、特性还是使用方式有误?
根据RFC 8259文档,Surrogate Pair是被支持的。JSON5作为JSON的超集,理应与JSON兼容,因此我认为这并非特性。
解答
- 使用方式排查:你当前的代码写法完全正确,不存在使用错误,都是按照标准方式加载包含合法Surrogate Pair的JSON字符串。
- 示例场景分析:从你给出的输出结果看,两者处理结果完全一致,这符合JSON5作为JSON超集的兼容要求,是正常表现。
- 若实际出现差异:
- 如果JSON5对合法的配对Surrogate Pair处理结果与JSON不一致(比如未将代理对合并为单个Unicode字符),这属于Bug——因为JSON5必须兼容JSON的核心规范,合法JSON输入的处理结果必须和原生json包一致。
- 如果差异来自JSON5支持了JSON不允许的非法场景(比如单独的未配对代理码点),这属于JSON5的扩展特性,但这种扩展不能影响对合法JSON输入的兼容处理。
内容的提问来源于stack exchange,提问作者Green
相关产品推荐
相关产品推荐

