如何在线格式化和校验 JSON

· 7 分钟阅读

如果您使用API、配置文件或任何类型的结构化数据,您会定期处理JSON。如果您曾经盯着一堆缩小的JSON试图找到缺失的括号,您就知道为什么格式化很重要。基于浏览器的格式化工具在本地处理整个工作,而无需将您的数据上传到服务器。

JSON格式化的作用

来自API响应或缩小文件的原始JSON看起来像这样:

{"users":[{"name":"Alice","age":30,"roles":["admin","editor"]},{"name":"Bob","age":25,"roles":["viewer"]}]}

格式化工具将其转换为可读的内容:

{
  "users": [
    {
      "name": "Alice",
      "age": 30,
      "roles": ["admin", "editor"]
    },
    {
      "name": "Bob",
      "age": 25,
      "roles": ["viewer"]
    }
  ]
}

相同的数据,但现在您可以真正阅读、发现错误并理解结构。

如何在线格式化JSON

  1. 粘贴您的JSON到输入字段。格式化工具会立即检测语法错误并验证结构。
  2. 选择缩进:选择2或4个空格,或点击「缩小」将JSON压缩为单行。
  3. 复制结果:格式化的输出包括彩色语法高亮。复制它以在您的代码、配置文件或文档中使用。

JSON的简史

JSON(JavaScript对象表示法)由Douglas Crockford于2001年规定,于RFC 4627(2006)中正式记录,并于2013年标准化为ECMA-404,于2017年标准化为ISO/IEC 21778。Crockford没有发明JSON:他从已经在使用的JavaScript对象字面语法的子集中提取了它,并给它一个名称加上json.org上的单页规范。

JSON迅速取代了XML作为Web API的标准,因为它简单得多。XML响应使用开放/关闭标签很冗长;等效的JSON是其一半大小。浏览器可以原生解析JSON(自2009年ECMAScript 5起使用JSON.parse、JSON.stringify),无需XML解析器。

到2015年,世界上每个主要API都说JSON:REST API、GraphQL查询、WebSocket消息、配置文件(package.json、tsconfig.json、.vscode/settings.json),甚至数据库(PostgreSQL JSONB、类似JSON的MongoDB BSON)。它成为了Web上结构化数据的通用语言。

JSON的简单性也是其限制:没有注释、没有尾随逗号、没有日期类型、没有二进制支持。出现了几个JSON变体来解决这些差距(请参阅下面的「JSON类替代格式」)。

常见JSON错误以及如何发现它们

大多数JSON错误归结为一些常见错误:

一个好的格式化工具会准确突出显示错误位置,以便您可以立即修复它,而不是猜测。

JSON数据类型

JSON只有6种数据类型:

类型示例备注
字符串"hello"始终为双引号,支持\n\t\\\"\uXXXX
数字423.14-1e10没有NaN或Infinity,没有前导零
布尔值truefalse仅小写
nullnull仅小写
数组[1, 2, 3]有序,任何类型,逗号分隔
对象{"key": "value"}键必须是带引号的字符串,逗号分隔

明显缺失:日期(使用ISO 8601字符串)、二进制数据(使用Base64字符串)、注释(使用单独的文档字段)和bigint(JSON数字是双精度;值>= 2^53会丢失精度)。

何时格式化与缩小

格式化(漂亮打印)当您需要:

缩小当您需要:

大小差异很显著:典型的50 KB漂亮打印的JSON缩小为约30 KB。对于高流量API,缩小的响应节省带宽。对于人类编辑的文件,格式化是必不可少的。

JSON类替代格式

当JSON的严格性是个问题时,几种变体放松了规则:

格式在JSON之上添加最佳用途
JSON5注释、尾随逗号、单引号、未引用的键人类编辑的配置文件
JSONC仅注释(// 和 /* */)VS Code设置,tsconfig.json
HJSON注释、未引用的字符串、多行字符串人类友好的配置
JSON Lines(NDJSON)每行一个JSON对象,没有外层数组日志文件、流式传输
YAML基于缩进、注释、锚点、引用Kubernetes、GitHub Actions
TOML类似INI的语法、日期、注释Cargo.toml、pyproject.toml
BSON带有额外类型(Date、ObjectId、Binary)的二进制JSONMongoDB内部存储
CBOR(RFC 8949)针对大小优化的二进制格式受约束设备API
MessagePack类似JSON的二进制,紧凑内部API序列化

对于数据交换(API响应、配置),坚持严格的JSON。对于人类编辑的配置,JSON5或JSONC更友好。对于数据流式传输,NDJSON是事实标准。

常见陷阱

使用JSON的提示

隐私和机密JSON

JSON格式化工具完全在您的浏览器中运行。您粘贴的JSON、中间处理和格式化的输出都保留在您的设备上。没有任何内容上传到服务器、记录或与任何人共享。

这很重要,因为JSON通常包含极其敏感的数据:带有客户记录和电子邮件地址的API响应、身份验证令牌和会话数据、揭示产品架构的内部API模式、带有数据库密码的配置文件、来自会计API的财务数据、来自FHIR API的医疗记录、来自HR API的内部公司结构、揭示基础设施的带有堆栈跟踪的调试有效负载。云JSON格式化工具记录其请求日志中的每次粘贴,有时为「服务改进」保留它们,并参与了真正的事件,其中粘贴的API响应泄漏了客户数据和API密钥。基于浏览器的格式化工具没有任何暴露:JSON永远不会离开您的机器。

基于浏览器的格式化在页面加载后也可以离线工作,对于在飞机上、在没有互联网访问的安全环境中,或在任何您不能或不应将API数据(尤其是带有嵌入式凭据)粘贴到第三方服务的地方格式化JSON很有用。

常见问题

格式化器能处理大型 JSON 文件吗?

可以。由于工具在浏览器中运行,它可以处理数万行的文件。性能取决于您的设备,但大多数现代浏览器处理大型 JSON 都没问题。

它能离线工作吗?

可以。页面加载后,工具完全在您的浏览器中工作,无需联网。所有处理都通过 JavaScript 本地完成。

格式化和校验有什么区别?

格式化添加缩进和换行,让 JSON 可读。校验检查 JSON 结构是否正确 · 大括号是否平衡、引号是否正确、类型是否有效。大多数格式化器同时做两者。

可以在手机上使用吗?

可以。工具在任何带现代浏览器的设备上都能使用,包括手机和平板。