JSON 的几种标准格式(以及最常见的实际使用变体)
JSON(JavaScript Object Notation)本身在官方标准(RFC 8259 / ECMA-404)中只有一种核心语法,但在实际使用中,因为不同的场景、约定、风格、工具链,衍生出了几种被广泛认可的“格式风格”。
下面按规范性 + 流行度排序,列出目前最常见的几种 JSON “格式”:
| 序号 | 格式名称 | 是否官方标准 | 缩进风格 | 键是否必须加引号 | 主要使用场景 | 代表性工具/生态 | 推荐程度(2025-2026) |
|---|---|---|---|---|---|---|---|
| 1 | 标准紧凑格式(Compact) | 是 | 无缩进 | 必须 | 网络传输、API 返回、存储、日志 | 几乎所有 JSON 库默认 | ★★★★★(传输首选) |
| 2 | 标准美化格式(Pretty / Formatted) | 是 | 2 或 4 空格 | 必须 | 配置文件、调试、可读性优先 | jq、VS Code、Postman、浏览器 DevTools | ★★★★★(阅读首选) |
| 3 | JSON5 | 否(扩展) | 支持无引号键 | 可选 | 配置文件、手写 JSON、开发阶段 | json5 库、部分 IDE、Vite 配置 | ★★★★☆(配置常用) |
| 4 | JSONC(带注释) | 否(扩展) | 同标准 | 必须 | 配置文件(允许 // 和 /* */ 注释) | VS Code settings.json、tsconfig.json | ★★★★☆(开发常用) |
| 5 | HJSON | 否(扩展) | 更宽松 | 可省略引号 | 人类友好配置文件 | hjson 库(较小众) | ★★☆☆☆ |
| 6 | JSON Lines / NDJSON | 否(约定) | 每行一个对象 | 必须 | 日志、流式数据、大文件处理 | Logstash、Fluentd、Kafka、ClickHouse | ★★★★★(大数据/日志) |
| 7 | GeoJSON | 是(RFC 7946) | 标准 JSON | 必须 | 地理空间数据 | GIS 系统、地图服务 | 领域专用 |
| 8 | JSON-LD | 是(W3C) | 标准 JSON | 必须 | 语义网、结构化数据、SEO | Schema.org、Google 搜索 | 领域专用 |
最常用的几种格式示例对比
1. 标准紧凑格式(Compact JSON)
{"id":123,"name":"张三","age":28,"isActive":true,"tags":["java","python"],"address":{"city":"上海","zip":200000}}
2. 标准美化格式(Pretty JSON)—— 2空格 / 4空格 都常见
{
"id": 123,
"name": "张三",
"age": 28,
"isActive": true,
"tags": ["java", "python"],
"address": {
"city": "上海",
"zip": 200000
}
}
3. JSON5(开发配置中最受欢迎的扩展)
{
// 支持单行注释
id: 123, // 键可以不加引号(合法标识符)
name: "张三",
age: 28,
isActive: true,
// 支持尾随逗号
tags: [
"java",
"python",
"golang", // ← 最后一个逗号合法
],
address: {
city: '上海',
zip: 200000,
note: '可以单引号'
}
}
4. JSONC(带注释 JSON)
{
"id": 123,
"name": "张三",
// 这里是单行注释
"age": 28, /* 这是块注释 */
"tags": ["java", "python"]
}
5. JSON Lines / NDJSON(每行一个独立 JSON 对象)
{"id":1,"name":"张三","time":"2025-01-01"}
{"id":2,"name":"李四","time":"2025-01-02"}
{"id":3,"name":"王五","time":"2025-01-03"}
快速决策表(你应该用哪种?)
| 场景 | 强烈推荐格式 | 为什么 | 常见工具/库支持情况 |
|---|---|---|---|
| HTTP API 返回 | 紧凑 JSON | 体积小、解析快 | 所有语言都原生支持 |
| 调试 / 日志查看 | 美化 JSON(2或4空格) | 可读性第一 | jq、python -m json.tool |
| 配置文件(手写) | JSON5 或 JSONC | 允许注释、尾随逗号、无引号键 | VS Code 原生支持 JSONC |
| 大规模日志 / 数据管道 | JSON Lines / NDJSON | 可逐行读取、不需要一次性加载全部 | fluentd、logstash、spark |
| 需要人类长期维护的配置 | JSON5 | 最接近 JavaScript 对象字面量 | json5 库、部分前端构建工具 |
| 安全敏感、不可信来源 | 标准 JSON(紧凑或美化) | 拒绝任何扩展语法,最高兼容性 | — |
小结口诀(背下来就够用)
- 传网路上 → 紧凑(Compact)
- 给人看 → 美化(Pretty)
- 自己写配置 → JSON5 / JSONC
- 日志流式 → JSON Lines / NDJSON
- 安全第一 → 只认标准 JSON
你现在最常遇到的是哪一种 JSON 格式的使用困惑?
- API 返回格式太大了想压缩?
- 配置文件想加注释?
- 日志系统要处理海量 JSON?
- 还是想知道怎么在代码里优雅输出美化 JSON?
告诉我具体场景,我可以给你对应的代码示例或工具推荐。