JSON 与数据处理指南
JSON Unicode 键名:转义等价与归一化不同
按解码后的名称比较键,保留 Unicode 组合与分解形式的区别,避免归一化覆盖。
转义保留同一字符
字面 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 校验各自只回答部分问题。