JSON 与数据处理指南

JSON Unicode 键名:转义等价与归一化不同

按解码后的名称比较键,保留 Unicode 组合与分解形式的区别,避免归一化覆盖。

Nav Tools ·

转义保留同一字符

字面 A 与 U+0041 转义解码后是同一字符串,格式化改变写法不一定改变名称。

用 Unicode 转义工具检查陌生字符,判断写法等价时比较解析后的键名。

JSON.parse('{"\u0041":1}').A → 1

规范等价需要另一个规则

预组合重音字符与基础字符加组合标记看起来相同,但仍可能是两个 JSON 键。

JSON 解析不会自动归一化,只要解码后字符串不同,对象就可以同时保留这两个名称。

const x = JSON.parse('{"\u00e9":1,"e\u0301":2}');
Object.keys(x).length → 2

归一化必须处理冲突

把所有键转成 NFC 可能让两个键合并,新对象赋值时可能悄悄覆盖前一个值。

协议需要归一化时,应在构建结果前检测冲突,并明确拒绝或处理,不能只做字符串转换。

区分存储标识与显示文字

外部约定的字段名应保留规定的字节与解码字符串,视觉相近不能作为身份相等规则。

样例覆盖转义 ASCII、组合标记和相似字形;格式化与 Schema 校验各自只回答部分问题。

参考资料

← JSON 与数据处理指南