JSON 格式化/验证器
验证和格式化 JSON 的免费在线工具。
?JSON을 입력하세요
📝 입력 JSON
줄: 0문자: 0크기: 0 bytes
✨ 결과
JSON (JavaScript Object Notation)의 유효성을 검사하고 포맷팅합니다. 들여쓰기를 추가하여 가독성을 높이거나, 공백을 제거하여 크기를 줄일 수 있습니다.
什么是 JSON?
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。易于人类阅读和编写,也易于机器解析和生成。广泛用于 Web API、配置文件和数据存储等场景。
主要功能
- 验证:实时检测 JSON 语法错误
- 格式化(美化):添加缩进提高可读性
- 压缩:删除空格减小文件大小
- 实时统计:显示行数、字符数和字节大小
- 缩进设置:可选择 2/4/8 个空格
- 示例加载:快速测试示例 JSON
使用方法
JSON 验证
- 将 JSON 粘贴到输入区域
- 实时进行验证
- 如有错误,将显示详细的错误消息
JSON 格式化
- 输入 JSON
- 选择缩进大小(2/4/8 个空格)
- 点击"格式化"按钮
- 输出格式整齐的 JSON
JSON 压缩
- 输入 JSON
- 点击"压缩"按钮
- 输出删除空格的单行 JSON
JSON 基本语法
数据类型
1. 对象(Object)
{
"name": "John",
"age": 30
}
2. 数组(Array)
["apple", "banana", "orange"]
3. 字符串(String)
"Hello World"
4. 数字(Number)
42
3.14
-10
5. 布尔值(Boolean)
true
false
6. null
null
嵌套结构
{
"user": {
"name": "John Doe",
"age": 30,
"emails": ["john@example.com", "doe@example.com"],
"address": {
"city": "New York",
"country": "USA"
},
"active": true,
"lastLogin": null
}
}
常见 JSON 错误
1. 尾随逗号(Trailing Comma)
// ❌ 错误
{
"name": "John",
"age": 30, ← 最后的逗号
}
// ✅ 正确
{
"name": "John",
"age": 30
}
2. 缺少引号
// ❌ 错误
{
name: "John" ← 键没有引号
}
// ✅ 正确
{
"name": "John"
}
3. 使用单引号
// ❌ 错误
{
'name': 'John' ← 单引号
}
// ✅ 正确
{
"name": "John"
}
4. 使用注释
// ❌ 错误
{
// 这是注释
"name": "John"
}
// ✅ JSON 不支持注释
// 需要使用 JSONC 或 JSON5
5. 未定义的值
// ❌ 错误
{
"name": "John",
"age": undefined ← JSON 中没有 undefined
}
// ✅ 正确(使用 null)
{
"name": "John",
"age": null
}
使用场景
1. API 响应调试
// 格式化从 API 接收的响应以便查看
{
"status": "success",
"data": {
"users": [
{"id": 1, "name": "John"},
{"id": 2, "name": "Jane"}
]
}
}
2. 编写配置文件
// package.json、tsconfig.json 等
{
"name": "my-app",
"version": "1.0.0",
"dependencies": {
"react": "^18.0.0"
}
}
3. 数据存储
// 本地存储、文件保存等
{
"theme": "dark",
"language": "zh-CN",
"notifications": true
}
4. 日志分析
// 结构化日志
{
"timestamp": 1640995200,
"level": "error",
"message": "Connection failed",
"details": {
"host": "api.example.com",
"port": 443
}
}
5. 测试数据
// 生成模拟(mock)数据
{
"users": [
{"id": 1, "name": "Test User 1"},
{"id": 2, "name": "Test User 2"}
]
}
各编程语言的使用方法
JavaScript
// JSON → 对象(解析)
const obj = JSON.parse('{"name":"John","age":30}');
console.log(obj.name); // "John"
// 对象 → JSON(字符串化)
const json = JSON.stringify(obj);
console.log(json); // '{"name":"John","age":30}'
// 格式化(2 个空格缩进)
const formatted = JSON.stringify(obj, null, 2);
Python
import json
# JSON → 字典
data = json.loads('{"name":"John","age":30}')
print(data['name']) # "John"
# 字典 → JSON
json_str = json.dumps(data)
# 格式化
formatted = json.dumps(data, indent=2)
PHP
<?php
// JSON → 数组
$data = json_decode('{"name":"John","age":30}', true);
echo $data['name']; // "John"
// 数组 → JSON
$json = json_encode($data);
// 格式化
$formatted = json_encode($data, JSON_PRETTY_PRINT);
?>
Java
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
// JSON → 对象
Gson gson = new Gson();
User user = gson.fromJson(jsonString, User.class);
// 对象 → JSON
String json = gson.toJson(user);
// 格式化
Gson prettyGson = new GsonBuilder().setPrettyPrinting().create();
String formatted = prettyGson.toJson(user);
C#
using System.Text.Json;
// JSON → 对象
var user = JsonSerializer.Deserialize<User>(jsonString);
// 对象 → JSON
var json = JsonSerializer.Serialize(user);
// 格式化
var options = new JsonSerializerOptions { WriteIndented = true };
var formatted = JsonSerializer.Serialize(user, options);
格式化 vs 压缩
格式化(美化)
优点:
- 便于人类阅读
- 易于调试
- 易于理解结构
缺点:
- 文件大小增加
- 网络传输效率低
使用场景:
- 开发/调试
- 配置文件
- 文档编写
压缩
优点:
- 文件大小减少(约 30-50%)
- 网络传输效率高
- 节省存储空间
缺点:
- 难以阅读
- 难以调试
使用场景:
- 生产环境
- API 响应
- 大量数据
实用技巧
1. 处理大型 JSON 文件
// 使用流式解析
const stream = fs.createReadStream('large.json');
const parser = JSONStream.parse('*');
stream.pipe(parser);
2. 处理循环引用
const obj = {};
obj.self = obj; // 循环引用
// 会产生错误
// JSON.stringify(obj); // TypeError
// 使用自定义 replacer 解决
const json = JSON.stringify(obj, (key, value) => {
if (key === 'self') return undefined;
return value;
});
3. 处理 Date 对象
const data = {
name: "John",
created: new Date()
};
// Date → ISO 8601 字符串
const json = JSON.stringify(data);
// {"name":"John","created":"2022-01-01T00:00:00.000Z"}
4. 仅序列化特定字段
const user = {
name: "John",
password: "secret",
age: 30
};
// 排除 password
const json = JSON.stringify(user, ['name', 'age']);
// {"name":"John","age":30}
5. 压缩前后对比
const data = { /* 复杂对象 */ };
const formatted = JSON.stringify(data, null, 2);
console.log(formatted.length); // 1500
const minified = JSON.stringify(data);
console.log(minified.length); // 850
// 约减少 43%!
JSON vs 其他格式
JSON vs XML
| 特性 | JSON | XML |
|---|---|---|
| 可读性 | 更简洁 | 更冗长 |
| 解析速度 | 快 | 慢 |
| 数据类型 | 原生支持 | 仅字符串 |
| 属性 | 无 | 有 |
| 注释 | 无 | 有 |
JSON vs YAML
| 特性 | JSON | YAML |
|---|---|---|
| 可读性 | 中等 | 非常好 |
| 语法 | 严格 | 灵活 |
| 注释 | 无 | 有 |
| 复杂结构 | 可能 | 更容易 |
| 解析速度 | 快 | 慢 |
常见问题
Q:JSON 可以添加注释吗?
标准 JSON 不支持注释。替代方案:
- JSONC:VS Code 等使用的支持注释的 JSON
- JSON5:支持 JavaScript 风格的注释
Q:JSON 的最大大小是多少?
理论上没有限制,但实际上:
- 浏览器:约 10-100 MB(因浏览器而异)
- Node.js:约 512 MB(V8 引擎默认值)
- 内存限制:取决于系统内存
Q:JSON 中如何表示日期?
标准方法是使用 ISO 8601 字符串:
{"date": "2022-01-01T00:00:00.000Z"}
Q:JSON 中 undefined 和 null 的区别是什么?
- null:JSON 中的有效值
- undefined:JSON 不支持(被省略或转换为 null)
Q:格式化会使性能变慢吗?
会稍微变慢,但可以忽略不计。建议开发时使用格式化,生产环境使用压缩。
Q:JSON 文件中有 BOM 怎么办?
BOM(字节顺序标记)应该删除:
const json = text.replace(/^\uFEFF/, '');
相关工具
- Base64 编码器 - 将 JSON 编码为 Base64
- URL 编码器 - 将 JSON 安全地编码到 URL 中
- 文本比较 - 比较两个 JSON
性能
- 解析速度:小于毫秒(一般大小)
- 格式化速度:即时
- 压缩速度:即时
- 内存使用:最小
浏览器兼容性
JSON.parse() 和 JSON.stringify() 在所有现代浏览器中都受支持:
- Chrome(所有版本)✓
- Firefox(所有版本)✓
- Safari(所有版本)✓
- Edge(所有版本)✓
- IE 8+ ✓
隐私保护
此工具完全在客户端运行。您输入的 JSON 不会发送到服务器,仅在浏览器中处理。
💬 这个工具对您有帮助吗?
如有任何疑问或改进建议,欢迎随时提供反馈!