JSON 格式化 & 验证工具 常见问题
Q: 什么是 JSON 格式化工具?
A: 什么是 JSON 格式化工具?
JSON 格式化工具是一种将原始、压缩(minified)或格式不佳的 JSON 数据重新格式化,添加合适的缩进、换行和空格,使其易于人类阅读的工具。大多数 JSON 格式化工具还包含校验、语法高亮、错误检测,有时还提供键排序、压缩(minification)和树视图导航等额外功能。我们的免费在线 JSON 格式化工具将格式化和校验合二为一,为你提供即时、干净的输出以及详细的错误报告。
Q: 为什么我的 JSON 无效?
A: 为什么我的 JSON 无效?
当 JSON 违反 JSON 规范的严格规则时,它就是无效的。最常见的原因包括:
- 尾部逗号:对象或数组的最后一项后面多了逗号
- 缺少双引号:对象键或字符串值没有使用双引号
- 使用单引号:本应使用双引号却用了单引号(单引号在 JSON 中无效)
- 未转义的特殊字符:例如字符串中未转义的反斜杠或引号
- 无效的值:例如
undefined、NaN或Infinity(这些在 JSON 中没有对应形式) - 花括号或方括号不匹配:
{/}或[/]未正确配对
使用 JSON 校验器可以精确定位语法错误的位置和性质。大多数校验器会报告它遇到的第一个问题的行号、列号以及描述性错误信息。
Q: JSON 和 JavaScript 对象有什么区别?
A: JSON 和 JavaScript 对象有什么区别?
虽然 JSON 语法源自 JavaScript 对象字面量语法,但它们并不是一回事。主要区别包括:
- 键必须使用双引号 -- JSON 要求
{"key": "value"},而 JavaScript 允许{key: "value"}(不带引号)和{'key': 'value'}(单引号)。 - 字符串值必须使用双引号 -- JSON 只允许字符串使用双引号。JavaScript 单引号和双引号都可以接受。
- 不允许尾部逗号 -- JSON 禁止在最后一项之后出现逗号。JavaScript 允许。
- 数据类型有限 -- JSON 仅支持字符串、数字、布尔值、null、对象和数组。JavaScript 对象可以包含函数、
undefined、Date、Map、Set以及其他特殊类型。 - 不支持注释 -- 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 非常简单:
- 复制你的 JSON 数据
- 粘贴到 JSON 校验工具中
- 点击校验或格式化按钮
- 工具要么报告 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 请求体、配置文件以及服务之间的数据交换契约。