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

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兼容,因此我认为这并非特性。

解答

  1. 使用方式排查:你当前的代码写法完全正确,不存在使用错误,都是按照标准方式加载包含合法Surrogate Pair的JSON字符串。
  2. 示例场景分析:从你给出的输出结果看,两者处理结果完全一致,这符合JSON5作为JSON超集的兼容要求,是正常表现。
  3. 若实际出现差异:
    • 如果JSON5对合法的配对Surrogate Pair处理结果与JSON不一致(比如未将代理对合并为单个Unicode字符),这属于Bug——因为JSON5必须兼容JSON的核心规范,合法JSON输入的处理结果必须和原生json包一致。
    • 如果差异来自JSON5支持了JSON不允许的非法场景(比如单独的未配对代理码点),这属于JSON5的扩展特性,但这种扩展不能影响对合法JSON输入的兼容处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 09:40:28