跳至正文

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 验证

  1. 将 JSON 粘贴到输入区域
  2. 实时进行验证
  3. 如有错误,将显示详细的错误消息

JSON 格式化

  1. 输入 JSON
  2. 选择缩进大小(2/4/8 个空格)
  3. 点击"格式化"按钮
  4. 输出格式整齐的 JSON

JSON 压缩

  1. 输入 JSON
  2. 点击"压缩"按钮
  3. 输出删除空格的单行 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

特性JSONXML
可读性更简洁更冗长
解析速度
数据类型原生支持仅字符串
属性
注释

JSON vs YAML

特性JSONYAML
可读性中等非常好
语法严格灵活
注释
复杂结构可能更容易
解析速度

常见问题

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/, '');

相关工具

性能

  • 解析速度:小于毫秒(一般大小)
  • 格式化速度:即时
  • 压缩速度:即时
  • 内存使用:最小

浏览器兼容性

JSON.parse() 和 JSON.stringify() 在所有现代浏览器中都受支持:

  • Chrome(所有版本)✓
  • Firefox(所有版本)✓
  • Safari(所有版本)✓
  • Edge(所有版本)✓
  • IE 8+ ✓

隐私保护

此工具完全在客户端运行。您输入的 JSON 不会发送到服务器,仅在浏览器中处理。

💬 这个工具对您有帮助吗?

如有任何疑问或改进建议,欢迎随时提供反馈!