📋

JSON 格式化 & 验证工具 常见问题

Q: 什么是 JSON 格式化工具?

A: 什么是 JSON 格式化工具?

JSON 格式化工具是一种将原始、压缩(minified)或格式不佳的 JSON 数据重新格式化,添加合适的缩进、换行和空格,使其易于人类阅读的工具。大多数 JSON 格式化工具还包含校验、语法高亮、错误检测,有时还提供键排序、压缩(minification)和树视图导航等额外功能。我们的免费在线 JSON 格式化工具将格式化和校验合二为一,为你提供即时、干净的输出以及详细的错误报告。

Q: 为什么我的 JSON 无效?

A: 为什么我的 JSON 无效?

当 JSON 违反 JSON 规范的严格规则时,它就是无效的。最常见的原因包括:

  • 尾部逗号:对象或数组的最后一项后面多了逗号
  • 缺少双引号:对象键或字符串值没有使用双引号
  • 使用单引号:本应使用双引号却用了单引号(单引号在 JSON 中无效)
  • 未转义的特殊字符:例如字符串中未转义的反斜杠或引号
  • 无效的值:例如 undefinedNaNInfinity(这些在 JSON 中没有对应形式)
  • 花括号或方括号不匹配{/}[/] 未正确配对

使用 JSON 校验器可以精确定位语法错误的位置和性质。大多数校验器会报告它遇到的第一个问题的行号、列号以及描述性错误信息。

Q: JSON 和 JavaScript 对象有什么区别?

A: JSON 和 JavaScript 对象有什么区别?

虽然 JSON 语法源自 JavaScript 对象字面量语法,但它们并不是一回事。主要区别包括:

  1. 键必须使用双引号 -- JSON 要求 {"key": "value"},而 JavaScript 允许 {key: "value"}(不带引号)和 {'key': 'value'}(单引号)。
  2. 字符串值必须使用双引号 -- JSON 只允许字符串使用双引号。JavaScript 单引号和双引号都可以接受。
  3. 不允许尾部逗号 -- JSON 禁止在最后一项之后出现逗号。JavaScript 允许。
  4. 数据类型有限 -- JSON 仅支持字符串、数字、布尔值、null、对象和数组。JavaScript 对象可以包含函数、undefinedDateMapSet 以及其他特殊类型。
  5. 不支持注释 -- JSON 不支持注释。源代码中的 JavaScript 对象可以包含注释。

这意味着你不能简单地写一个 JavaScript 对象就把它当作 JSON -- 它必须通过 JSON.stringify() 序列化,或者按照严格的 JSON 规则编写。

Q: JSON 可以有注释吗?

A: JSON 可以有注释吗?

不可以,官方 JSON 规范(RFC 8259)不支持注释。JSON 被设计为一种极简、与语言无关的数据交换格式,刻意排除了注释,以便让解析器在各种语言中保持简单和一致。

如果你需要注释,有以下几种选择:

  • JSONC(JSON with Comments) -- VS Code 等工具将其用于配置文件。JSONC 允许 // 行注释和 /* */ 块注释。
  • YAML 或 TOML -- 原生支持注释的替代配置格式。
  • 基于约定的元数据 -- 在 JSON 对象中使用 "_comment""//" 这样的键来存储人类可读的说明。注意这会给你的数据负载增加内容。
  • 解析前移除注释 -- 在将 JSON 传给严格解析器之前,使用预处理步骤删除注释。

Q: 如何在线校验 JSON?

Q: 如何在线校验 JSON?

A: 如何在线校验 JSON?

在线校验 JSON 非常简单:

  1. 复制你的 JSON 数据
  2. 粘贴到 JSON 校验工具
  3. 点击校验或格式化按钮
  4. 工具要么报告 JSON 有效,要么显示错误并标明问题的确切位置和描述

一个好的 JSON 校验器应该:

  • 根据官方 JSON 规范(RFC 8259)校验语法
  • 显示错误的行号和列号
  • 提供描述性错误信息,说明出错原因
  • 可选地同时格式化并美化 JSON
  • 针对不同类型的数据用颜色高亮语法

对于大型或敏感数据,许多在线校验器会在浏览器中全程在客户端处理,这意味着你的数据永远不会离开你的设备。

Q: 压缩(minified)JSON 是什么意思?

A: 压缩(minified)JSON 是什么意思?

压缩(minified)JSON 是指移除了所有不必要空白的 JSON -- 空格、制表符、换行和缩进都被剥离。结果是单行(或极少数行)的紧凑文本:

{"users":[{"id":1,"name":"Alice","roles":["admin"]}],"total":1}

压缩(minified)JSON 在生产环境中使用有几个原因:

  • 文件更小 -- 可以将负载大小减少 30-50% 甚至更多
  • 网络传输更快 -- 需要传输的数据更少意味着延迟更低
  • 带宽成本更低 -- 对高流量 API 和移动应用尤其重要

代价是压缩(minified)JSON 对人类来说基本上不可读。使用 JSON 美化打印工具将压缩的 JSON 重新格式化为可读结构,以便调试或检查。

Q: 如何在命令行中美化打印 JSON?

A: 如何在命令行中美化打印 JSON?

有几种命令行工具可以美化打印 JSON:

使用 jq(最流行,需单独安装):

cat file.json | jq .

使用 Python(大多数系统自带):

python -m json.tool file.json

使用 Node.js:

node -e "const d = require('./data.json'); console.log(JSON.stringify(d, null, 2));"

使用 curl(美化打印 API 响应):

curl https://api.example.com/data | jq .

推荐使用 jq 工具,因为它有彩色输出、查询能力和健壮的错误处理。

Q: 什么是 JSON Schema?

A: 什么是 JSON Schema?

JSON Schema 是一种词汇表(vocabulary),允许你对 JSON 文档进行标注和校验。它定义了一个 JSON 文档必须满足的结构、数据类型和约束。可以把它看作是你 JSON 数据的契约或规范。

JSON Schema 的关键能力:

  • 类型校验 -- 指定某个值必须是字符串、数字、布尔值、数组、对象还是 null
  • 必填字段 -- 将某些属性标记为必填
  • 值约束 -- 设置最小值/最大值、字符串模式(regex)和允许的值(枚举)
  • 数组校验 -- 控制数组长度、元素类型和唯一性
  • 嵌套校验 -- 为嵌套对象和数组定义 schema
  • 条件校验 -- 根据其他字段的值应用不同的规则

JSON Schema 示例:

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "required": ["name", "email"],
  "properties": {
    "name": { "type": "string", "minLength": 1 },
    "email": { "type": "string", "format": "email" },
    "age": { "type": "integer", "minimum": 0, "maximum": 150 }
  }
}

JSON Schema 通常用于校验 API 请求体、配置文件以及服务之间的数据交换契约。

JSON 格式化 & 验证工具 常见问题 - 常见问题解答 - CoolTool