JSON格式化与校验

粘贴JSON即可美化、压缩,或精确找出无效位置。一切都在浏览器中运行,数据始终不会离开你的设备。

100% 在浏览器中运行。粘贴的内容不会被上传或存储。
JSON输入
结果
就绪。

JSON 格式化工具怎么用

  1. 把 JSON 粘贴到输入框中,或直接输入。
  2. 选择缩进方式:2个空格、4个空格或制表符。
  3. 点击格式化进行美化输出,或点击压缩去掉所有可省略的空白。
  4. 如果输入无效,校验器会显示错误信息以及解析失败处的行号和列号。
  5. 可以开启键排序,按字母顺序排列对象的键,或把结果转换为 YAML 或 CSV。
  6. 复制输出结果,粘贴到需要的地方。

所有处理都在您的浏览器中完成:您的 JSON 不会上传到服务器,也不会被保存,因此可以放心格式化包含隐私数据的 API 响应、配置文件和日志。

什么是 JSON?为什么要格式化?

JSON(JavaScript Object Notation)是一种轻量的文本数据格式,由 RFC 8259 和 ECMA-404 标准化。它只由六种值构成:对象({})、数组([])、字符串、数字、布尔值 true 和 false,以及 null。正因为简单,几乎所有 REST API、许多配置文件和无数日志管道都在使用它。

机器并不在乎空白,所以通过网络传输的 JSON 常被压缩成一行。这样效率高,但人几乎没法读。格式化会加上换行和统一的缩进,让您一眼看清嵌套结构、发现缺失的字段,并在 diff 中对比两份文档。压缩则相反,适合把 JSON 嵌入请求或减小数据体积。

常见 JSON 错误及修复方法

JSON 比 JavaScript 对象字面量更严格。以下是校验器最常发现的错误:

问题无效写法有效写法
末尾多余逗号[1, 2, 3,][1, 2, 3]
单引号{'name': 'Ada'}{"name": "Ada"}
键没有加引号{name: "Ada"}{"name": "Ada"}
注释// note 或 /* note */删除注释,或改用 "_comment" 字段
非 JSON 值undefined、NaN、Infinitynull 或字符串
前导零{"id": 007}{"id": 7} 或 "007"

从 JavaScript 代码中复制出来的典型错误片段如下:

{
  name: 'Ada Lovelace',
  born: 1815,   // year
  languages: ['English', 'French',],
}

修正后的 JSON 给每个键和字符串都加上双引号,删除了注释,并去掉了两处末尾逗号:

{
  "name": "Ada Lovelace",
  "born": 1815,
  "languages": ["English", "French"]
}

其他常见原因包括:字符串中有未转义的双引号或直接换行(请使用 \" 和 \n),以及最外层的闭合括号后面多出了字符。如果报告的位置看起来不对,请检查它上面一行:缺少的逗号通常要等解析器读到下一个值时才会被发现。

技巧与最佳实践

  • 选定一种缩进并坚持使用。JavaScript 项目中最常见的是两个空格;Python 工具中常用四个空格。保持一致比选哪种更重要。
  • 对比前先给键排序。JSON 对象是无序的,所以两份等价的文档可能看起来不同。给键排序后,版本控制中的 diff 和对比会清晰得多。
  • 注意特别大的数字。JavaScript 用 64 位浮点数存储数字,所以大于 9,007,199,254,740,991(253 − 1)的整数在浏览器中解析时可能丢失精度。较大的 ID 请以字符串形式传输。
  • 使用 UTF-8。RFC 8259 要求系统之间交换的 JSON 使用 UTF-8。
  • 需要时进行转换。CSV 适合想在电子表格中打开的扁平对象数组;YAML 更方便手工编辑。需要双向转换时,可以试试 JSON ↔ YAML 转换器或 CSV ↔ JSON 转换器。
提示:要查看令牌内容?JWT 的载荷是 Base64url 编码的 JSON,JWT 解码器可以帮您格式化。

常见问题

JSON 允许写注释吗?

不允许。RFC 8259 和 ECMA-404 都不允许注释。有些工具接受 JSONC 或 JSON5 等扩展格式,但标准解析器会拒绝它们。请在校验前删除注释,或把说明移到普通字段中。

为什么我的 JSON 在 JavaScript 中能用,这里却显示无效?

JavaScript 对象字面量允许单引号、不加引号的键、末尾逗号、注释以及 undefined 之类的值,而 JSON 这些都不允许。在代码中请用 JSON.stringify() 生成有效的 JSON,不要手写。

格式化会改变我的数据吗?

格式化和压缩只改变各个记号之间的空白;键、值和数组顺序都保持不变。键排序会调整对象成员的顺序,但由于 JSON 对象是无序的,含义不会改变。

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

校验是检查文本在语法上是否为正确的 JSON。格式化是用易读的缩进重新输出有效的 JSON。格式化工具会先校验,所以无法解析的文档不能被格式化。

可以把嵌套的 JSON 转换成 CSV 吗?

CSV 是扁平表格,最适合键相同的对象数组。嵌套的对象和数组在 CSV 中没有直接对应的形式,通常会被展平,或序列化后放进一个单元格。

更新于

评论

暂无评分

登录后即可为此工具评分。

分享技巧、提出问题,或说说这个工具对您是否有用。

还没有评论,来分享您的使用体验吧。

已复制到剪贴板