游客发表
打开 json.org 这个网站,官网你会看到页面设计像是下载停留在 2005 年。没有花哨的官网动效,没有弹窗广告,下载连导航栏都只有几行纯文字链接。官网但就是下载这么一个不起眼的站点,每天有成千上万的官网开发者从上面扒 JSON 的库文件、规范文档和测试用例。下载我第一次访问它是官网在 2013 年,当时为了搞懂一个解析报错,下载在浏览器里翻了十几页才找到那个隐藏的官网下载入口。十年过去,下载这个站点的官网结构几乎没变,下载链接的下载位置也没挪。
JSON 官网本身不提供所谓的官网“安装包”或“一键下载”。它不是一个软件产品,而是一个标准组织页面。你真正能下载的东西分三类:各语言实现库的源码包、官方规范文档的 PDF 或 HTML 版本、以及一组用于验证解析器正确性的测试文件。很多人第一次来会懵,以为点进“Download”就能拿到一个叫 json.exe 的东西。没有。你得先想清楚自己要什么。
如果你要找的是 Python 的 json 库,别从这里下。Python 标准库已经内置了 json 模块,直接 import json 就能用。Java 的话,官网推荐的是 Jackson 或 Gson,但这两个项目都不在 json.org 的服务器上托管。json.org 的“实现”页面更像一个黄页,列出各种语言的库名和作者主页链接。我数过,那个列表里有超过 40 种语言,从常见的 C++、Ruby 到冷门的 Erlang、Ada 都有。点进去之后,大部分链接会跳转到 GitHub 或 SourceForge。真正能从 json.org 直接下载的,只有 Douglas Crockford 早年写的几个参考实现,比如 json2.js 和 json_parse.js。这两个文件现在还在,最后更新日期停在 2017 年。
下载 json2.js 的过程很直接。在浏览器地址栏输入 json.org/json2.js,右键另存为就行。文件不大,压缩前不到 20KB。我打开看过,里面全是手工编写的 JavaScript 函数,没有构建工具,没有依赖管理,连分号风格都是老式的。这个文件曾经是前端处理 JSON 的标配,现在已经被原生 JSON.parse 和 JSON.stringify 取代。但如果你需要兼容 IE8,它依然是唯一的选择。Crockford 在文件头部写了一行注释:“json2.js 是公共领域作品。” 没有版权限制,随便改,随便用。
规范文档的下载稍微麻烦一点。官网首页右侧有个 “Standard” 链接,点进去是 ECMA-404 和 RFC 8259 的摘要页。RFC 8259 是 IETF 发布的正式标准,全文可以在 datatracker.ietf.org 上以 txt 或 html 格式下载。ECMA-404 则是 ECMA 国际的标准,需要填一个简单的表单才能拿到 PDF。我上次下载时,表单只问了邮箱和用途,没有验证码。填完立刻收到邮件,附件就是 PDF。文件排版很朴素,正文只有 16 页,其中 3 页是参考文献。
测试文件包叫 JSONTestSuite,托管在 GitHub 上。这个仓库有大约 300 个测试用例,每个用例是一个独立的 .json 文件,文件名直接标明预期结果,比如 y_string_unicode.json 表示应该解析成功,n_number_plus_sign.json 表示应该解析失败。我拿它测过自己写的一个简易解析器,结果在“深度嵌套”那组用例上挂了 12 个。这些文件可以直接 git clone,也可以从网页上逐个下载。压缩包大概 200KB,解压后没有目录结构,所有文件平铺在根目录下。
有个细节值得提:json.org 的服务器响应头里没有设置 Content-Type 为 application/json,很多文件其实是 text/plain。你如果用 curl 直接下载,终端里会显示一堆乱码。得加 -O 参数保存成文件,再用编辑器打开。另外,官网不支持 HTTPS,访问时浏览器会提示“不安全”。Crockford 在 2016 年的一次访谈里说过,他故意不升级 TLS,因为“JSON 规范里没有加密这一章”。这个态度很符合他的风格——只做一件事,做到极简。
下载完这些文件之后,你大概率不会经常打开它们。json2.js 会被打包进构建产物,规范文档会躺在某个文件夹里吃灰,测试用例只在调试解析器时跑一遍。但知道它们在哪里、怎么获取,本身就是一种底气。下次遇到 JSON 相关的奇怪问题,你可以直接翻规范原文,而不是在搜索引擎里看二手解读。那个简陋的 json.org 页面,就像一把没上漆的木头尺子,不漂亮,但刻度准。
友情链接