我把 24 份刁钻的 JSON 喂给 6 个解析器,只有 5 份表现一致
来源:dev.to — 2026-09-28
📋 概述
JSON 是大家都同意的格式,于是作者写了 24 份小巧但别扭的文档,把完全相同的字节交给同一台笔记本上的六个解析器——Python 3.13 的 json、Node 24 的 JSON.parse、Ruby 2.6 的 json、Perl 的 JSON::PP、jq 1.8.1、Swift 6.3 的 JSONSerialization——再比较返回结果。24 份里只有 5 份表现一致:3 份解析出相同的值,2 份被六者一致拒绝;其余 19 份都出现了分歧,要么有的接受有的拒绝,要么都接受但含义不同。
🔑 核心要点
- {"a":1,"a":2} 有真实的安全后果:五个解析器给 {"a":2},Swift 给 {"a":1},最后一个赢还是第一个赢。
- 如果网关校验 {"role":"user","role":"admin"} 时读到 admin 而后端读到 user,这个 bug 在两个代码库里都看不见。
- 大整数会让钱包受损:Node 把 12345678901234567890 变成 ...567000,没有报错也没有警告。
- 8 份文档直接分裂立场:注释、尾逗号、前导零、BOM、孤立代理项、NaN/Infinity、1e400,每个解析器单独看都合理,bug 活在接缝里。
💡 金句
这里每个解析器单独看都是合理的,bug 活在接缝里。
👍 0
👎 0
← 返回 dev.to 首页