ToolPal
在深色IDE中输入代码的程序员

如何在线格式化JSON — 完整指南

📷 Lukas / Pexels

如何在线格式化JSON — 完整指南

学习如何使用免费的在线JSON格式化器格式化、验证和清理JSON数据。适合开发者和API调试使用。

D作者: Daniel Park2026年3月15日3分钟阅读

什么是JSON?

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,人类易于读写,机器也易于解析和生成。它是现代Web开发中API响应、配置文件和数据存储的主流格式。

如果你处理API,你会不断遇到JSON。几乎每个REST API响应、每个Webhook载荷以及Node.js项目中的每个配置文件都是JSON格式。了解如何读取、格式化和调试JSON是开发者的核心技能。

为什么要格式化JSON?

压缩的JSON很难阅读。API响应通常以没有空格的单行形式到达 — 调试起来就是噩梦。格式化(或"美化打印")JSON会添加适当的缩进和换行,让你能够立即理解其结构。

格式化前:

{"name":"John Doe","age":30,"city":"New York","hobbies":["reading","coding"],"address":{"street":"123 Main St","zip":"10001"}}

格式化后:

{
  "name": "John Doe",
  "age": 30,
  "city": "New York",
  "hobbies": [
    "reading",
    "coding"
  ],
  "address": {
    "street": "123 Main St",
    "zip": "10001"
  }
}

差别是显著的。在格式化版本中,你一眼就能看出有五个顶级键,hobbies是一个有两个元素的数组,address是一个嵌套对象。在压缩版本中,你必须靠视觉解析匹配的大括号和方括号。

如何使用JSON格式化器

  1. 粘贴你的JSON — 将JSON数据放入输入框
  2. 点击"格式化" — 使用2或4空格缩进进行清理
  3. 点击"压缩" — 将JSON压缩回单行
  4. 复制结果 — 一键复制到剪贴板

格式化器在你粘贴时验证你的JSON,如果有任何问题,你会立即得到反馈。

常见的JSON错误(以及如何修复)

JSON有严格的语法规则,违反其中任何一条都会导致解析错误。以下是按实际出现频率排序的最常见错误:

1. 尾随逗号

最常见的JSON错误。JavaScript允许数组和对象中有尾随逗号,所以开发者经常忘记JSON不允许这样做。

// 错误 — "coding"后有尾随逗号
{
  "hobbies": ["reading", "coding",]
}

// 正确
{
  "hobbies": ["reading", "coding"]
}

2. 单引号代替双引号

JSON要求所有字符串使用双引号。单引号在JavaScript和Python中有效,但会破坏JSON解析。

// 错误
{'name': 'John Doe'}

// 正确
{"name": "John Doe"}

3. 未加引号的键

JavaScript对象不需要引号括起来的键(对于简单标识符),但在JSON中每个键必须是双引号括起来的字符串。

// 错误
{name: "John Doe", age: 30}

// 正确
{"name": "John Doe", "age": 30}

4. JSON中的注释

JSON不支持注释。这让人惊讶,因为JSON看起来像JavaScript,而JavaScript支持注释。如果你需要在配置文件中添加注释,请使用JSONC(VS Code支持的JSON with Comments)或YAML。

// 错误
{
  "port": 3000,  // 服务器端口
  "host": "localhost"
}

// 正确
{
  "port": 3000,
  "host": "localhost"
}

5. 未转义的特殊字符

包含反斜杠、双引号或控制字符的字符串必须正确转义:

// 错误 — 未转义的反斜杠和引号
{"path": "C:\Users\john", "note": "He said "hello""}

// 正确
{"path": "C:\\Users\\john", "note": "He said \"hello\""}

6. 无效的值类型

JSON支持的值类型只有:字符串、数字、布尔值(true/false)、null、对象和数组。其他任何内容都无效:

// 错误
{"value": undefined}
{"count": NaN}
{"total": Infinity}
{"date": new Date()}

// 正确的替代
{"value": null}
{"count": 0}
{"total": 9999999}
{"date": "2026-03-15T10:30:00Z"}

从命令行格式化JSON

当你无法访问基于Web的工具,或需要在脚本中格式化JSON时,以下命令行方法很有用:

使用Python(大多数系统上可用)

# 格式化JSON文件
python3 -m json.tool input.json

# 格式化管道传输的JSON
curl -s https://api.example.com/data | python3 -m json.tool

# 使用自定义缩进格式化
python3 -c "import json,sys; print(json.dumps(json.load(sys.stdin), indent=4))" < input.json

使用jq(JSON的瑞士军刀)

jq是一个专用的JSON处理器,也是在命令行处理JSON最强大的工具:

# 美化打印
cat data.json | jq '.'

# 格式化并提取特定字段
cat data.json | jq '.users[0].name'

# 格式化API响应
curl -s https://api.example.com/users | jq '.'

如果你经常处理JSON但还没有安装jq,现在就安装它。它会为你节省无数小时。

使用Node.js

# 快速格式化
node -e "console.log(JSON.stringify(JSON.parse(require('fs').readFileSync('/dev/stdin','utf8')),null,2))" < input.json

处理JSON的技巧

明智地选择缩进

  • 2空格缩进:更紧凑,屏幕上显示更多内容。在JavaScript/TypeScript项目和大多数Web框架中流行。大多数API文档中使用。
  • 4空格缩进:深层嵌套结构更易阅读。在Python项目和企业级Java环境中常见。
  • 制表符缩进:技术上有效但在JSON中罕见。坚持使用空格。

对于大多数Web开发,2空格是实用的选择。它在不浪费水平空间的情况下提供足够的视觉层次。

部署前始终验证

在生产环境中使用之前,特别是当你手动编写或修改JSON时,始终进行验证。一个缺失的逗号或不匹配的括号可能导致整个应用程序崩溃。我们的格式化器在你粘贴时就立即捕获语法错误,让你快速发现问题。

使用JSON Schema进行结构验证

如果你正在构建接受JSON输入的API,简单的解析是不够的。JSON Schema让你定义预期的结构、类型和约束:

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

这会捕获缺失的必需字段、错误的类型和超出范围的值 — 这些是基本JSON解析永远无法捕获的。

排序键以保持一致的差异

比较两个JSON对象时(在代码审查或配置差异中),未排序的键会创建嘈杂的差异。许多格式化器,包括我们的,提供按字母顺序递归排序对象键的选项。这对以下情况特别有用:

  • 版本控制中的配置文件(减少无意义的差异)
  • 调试期间比较API响应
  • 需要确定性的测试快照

真实的JSON调试场景

调试API响应

你发送了一个curl请求,收到了一行压缩的JSON。要理解哪里出了问题,首先需要看到结构:

curl -s https://api.example.com/users/123 | jq '.'

或者将响应粘贴到JSON格式化器中。然后你可以看到响应结构是否错误、字段是否缺失,或值是否意外。

比较两个JSON对象

你有两个应该相同但有些不同的API响应。用排序的键格式化两者,然后运行差异比较:

jq -S '.' response1.json > sorted1.json
jq -S '.' response2.json > sorted2.json
diff sorted1.json sorted2.json

-S标志按字母顺序排序键,这样结构差异不会在差异输出中产生干扰。

修复复制粘贴错误

同事将JSON粘贴到Slack,智能引号破坏了内容。将其粘贴到格式化器中,它会突出显示错误(弯引号代替直引号),这样你就知道需要修复什么。

这比你想象的更常见。聊天应用、文字处理器和一些文本编辑器会自动将"转换为弯引号,而弯引号在JSON中无效。

从大型JSON文件中提取数据

你收到了一个多兆字节的JSON文件,但只需要其中的一小部分。与其滚动数千行,不如使用jq提取你需要的内容:

# 获取第一个用户的电子邮件
cat users.json | jq '.data.users[0].email'

# 以平面列表形式获取所有用户名
cat users.json | jq '[.data.users[].name]'

# 按状态过滤用户
cat users.json | jq '[.data.users[] | select(.status == "active")]'

JSON与其他数据格式

属性JSONYAMLXMLTOML
可读性良好优秀一般良好
注释不支持支持支持支持
数据类型基础丰富基于字符串丰富
文件大小
解析速度中等
生态系统庞大增长中

JSON凭借其简洁性和通用的解析器支持赢得了API通信和数据交换的领域。YAML更适合注释和可读性重要的配置文件。XML在企业系统和文档格式中仍然保持其地位。TOML在配置方面(Rust的Cargo、Python的pyproject.toml)正在获得更多支持。

安全考虑

不要将敏感数据粘贴到服务器端格式化器

一些在线JSON格式化器会将你的数据发送到服务器进行处理。如果你处理API密钥、令牌、密码或个人数据,请只使用在浏览器中处理所有内容的客户端格式化器。我们的工具在本地完成所有格式化 — 数据永远不会被传输。

注意JSON注入

在构建接受JSON输入的应用程序时,始终验证和清理数据。永远不要通过连接字符串来构造JSON:

// 危险 — JSON注入风险
const json = '{"name": "' + userInput + '"}';

// 安全
const json = JSON.stringify({ name: userInput });

对不受信任的数据使用JSON.parse时要小心

JSON.parse()通常是安全的(不像eval()),但解析的数据可能有意外的类型或结构。在应用程序中使用之前,始终验证解析后JSON的形状。

立即使用免费的JSON格式化器格式化你的JSON数据。它完全在浏览器中运行,支持语法高亮,并在你粘贴时立即捕获错误。

常见问题

D

关于作者

Daniel Park

Senior frontend engineer based in Seoul. Seven years of experience building web applications at Korean SaaS companies, with a focus on developer tooling, web performance, and privacy-first architecture. Open-source contributor to the JavaScript ecosystem and founder of ToolPal.

了解更多

分享文章

XLinkedIn

相关文章