JSON 格式化工具 - 在线 JSON 美化压缩验证
免费在线 JSON 格式化、压缩、验证工具,支持语法高亮、错误提示、多种编程语言解析示例
什么是 JSON?
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于 JavaScript 的对象字面量语法,但独立于编程语言,易于人阅读和编写,同时也易于机器解析和生成。
JSON 已成为 Web 开发中最常用的数据交换格式,广泛用于 API 响应、配置文件、数据存储等场景。
JSON 数据类型
字符串 (String)
"Hello World"
双引号包裹的文本
数字 (Number)
42, 3.14, -100
整数或浮点数
布尔值 (Boolean)
true, false
真或假
空值 (Null)
null
表示空或不存在的值
对象 (Object)
{"name": "张三"}
键值对集合,用 {} 包裹
数组 (Array)
[1, 2, 3]
有序值列表,用 [] 包裹
JSON 格式化示例
压缩 JSON
{"name":"张三","age":25,"skills":["JavaScript","Python"],"address":{"city":"北京","zip":"100000"}}→
格式化 JSON
{
"name": "张三",
"age": 25,
"skills": [
"JavaScript",
"Python"
],
"address": {
"city": "北京",
"zip": "100000"
}
}编程语言中解析 JSON
JavaScript
// 解析 JSON 字符串
const jsonStr = '{"name": "张三", "age": 25}';
const obj = JSON.parse(jsonStr);
console.log(obj.name); // "张三"
// 对象转 JSON 字符串
const data = { name: "李四", age: 30 };
const str = JSON.stringify(data);
console.log(str); // '{"name":"李四","age":30}'
// 格式化输出(带缩进)
const pretty = JSON.stringify(data, null, 2);
console.log(pretty);
// 解析时处理错误
try {
const result = JSON.parse('invalid json');
} catch (e) {
console.error('JSON 解析失败:', e.message);
}Python
import json
# 解析 JSON 字符串
json_str = '{"name": "张三", "age": 25}'
data = json.loads(json_str)
print(data['name']) # "张三"
# 对象转 JSON 字符串
person = {"name": "李四", "age": 30}
json_str = json.dumps(person)
print(json_str) # '{"name": "\u674e\u56db", "age": 30}'
# 格式化输出(带缩进)
pretty = json.dumps(person, indent=2, ensure_ascii=False)
print(pretty)
# 从文件读取 JSON
with open('data.json', 'r', encoding='utf-8') as f:
data = json.load(f)
# 写入 JSON 到文件
with open('output.json', 'w', encoding='utf-8') as f:
json.dump(data, f, indent=2, ensure_ascii=False)Java
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
// 使用 Gson 库
Gson gson = new Gson();
// 解析 JSON 字符串
String jsonStr = "{\"name\": \"张三\", \"age\": 25}";
Person person = gson.fromJson(jsonStr, Person.class);
// 对象转 JSON 字符串
Person p = new Person("李四", 30);
String json = gson.toJson(p);
// 格式化输出
Gson prettyGson = new GsonBuilder().setPrettyPrinting().create();
String pretty = prettyGson.toJson(p);
// 使用 Jackson 库
import com.fasterxml.jackson.databind.ObjectMapper;
ObjectMapper mapper = new ObjectMapper();
MyClass obj = mapper.readValue(jsonStr, MyClass.class);
String json = mapper.writeValueAsString(obj);
String pretty = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);PHP
// 解析 JSON 字符串
$jsonStr = '{"name": "张三", "age": 25}';
$data = json_decode($jsonStr, true); // true 返回数组
echo $data['name']; // "张三"
// 对象方式访问
$obj = json_decode($jsonStr);
echo $obj->name; // "张三"
// 数组转 JSON 字符串
$person = ['name' => '李四', 'age' => 30];
$json = json_encode($person, JSON_UNESCAPED_UNICODE);
echo $json; // '{"name":"李四","age":30}'
// 格式化输出
$pretty = json_encode($person, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
echo $pretty;
// 错误处理
$data = json_decode('invalid json');
if (json_last_error() !== JSON_ERROR_NONE) {
echo 'JSON 解析失败: ' . json_last_error_msg();
}Go
import "encoding/json"
// 定义结构体
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
}
// 解析 JSON 字符串
jsonStr := `{"name": "张三", "age": 25}`
var person Person
err := json.Unmarshal([]byte(jsonStr), &person)
if err != nil {
panic(err)
}
fmt.Println(person.Name) // "张三"
// 对象转 JSON 字符串
p := Person{Name: "李四", Age: 30}
jsonData, _ := json.Marshal(p)
fmt.Println(string(jsonData))
// 格式化输出
prettyJSON, _ := json.MarshalIndent(p, "", " ")
fmt.Println(string(prettyJSON))
// 解析到 map
var data map[string]interface{}
json.Unmarshal([]byte(jsonStr), &data)C#
using System.Text.Json;
// 解析 JSON 字符串
string jsonStr = @"{""name"": ""张三"", ""age"": 25}";
var person = JsonSerializer.Deserialize<Person>(jsonStr);
Console.WriteLine(person.Name); // "张三"
// 对象转 JSON 字符串
var p = new Person { Name = "李四", Age = 30 };
string json = JsonSerializer.Serialize(p);
// 格式化输出
var options = new JsonSerializerOptions { WriteIndented = true };
string pretty = JsonSerializer.Serialize(p, options);
Console.WriteLine(pretty);
// 使用 JsonNode 动态解析
using System.Text.Json.Nodes;
JsonNode node = JsonNode.Parse(jsonStr);
Console.WriteLine(node["name"]);
// 使用 JObject (Newtonsoft.Json)
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
var obj = JObject.Parse(jsonStr);
Console.WriteLine(obj["name"]);
string pretty = JsonConvert.SerializeObject(p, Formatting.Indented);Ruby
require 'json'
# 解析 JSON 字符串
json_str = '{"name": "张三", "age": 25}'
data = JSON.parse(json_str)
puts data['name'] # "张三"
# 对象转 JSON 字符串
person = { name: '李四', age: 30 }
json = person.to_json
puts json # '{"name":"李四","age":30}'
# 格式化输出
pretty = JSON.pretty_generate(person)
puts pretty
# 从文件读取
data = JSON.parse(File.read('data.json'))
# 写入文件
File.write('output.json', JSON.pretty_generate(data))Shell / 命令行
# 使用 jq 工具格式化 JSON
echo '{"name":"张三","age":25}' | jq .
# 提取字段
echo '{"name":"张三","age":25}' | jq '.name'
# 输出: "张三"
# 压缩 JSON
echo '{"name": "张三", "age": 25}' | jq -c .
# 使用 Python
echo '{"name":"张三"}' | python3 -m json.tool
# 验证 JSON
echo '{"name":"张三"}' | jq . > /dev/null && echo "Valid" || echo "Invalid"JSON 常见应用场景
🌐 API 响应
RESTful API 最常用的响应格式,前后端数据交互标准
⚙️ 配置文件
package.json、tsconfig.json 等项目配置文件
💾 数据存储
NoSQL 数据库(如 MongoDB)使用 JSON 格式存储
📱 移动应用
移动端与服务器的数据通信格式
🔗 微服务通信
服务间消息传递和数据交换
📊 数据分析
数据导出、日志记录、数据交换
JSON 语法规则
键必须用双引号包裹,不能用单引号
字符串必须用双引号包裹
数字不需要引号
键值对之间用冒号分隔
多个键值对用逗号分隔
最后一个元素后不能有逗号
不支持注释
不支持 undefined、函数、Date 等类型
常见问题
Q: JSON 和 JavaScript 对象有什么区别?
A: JSON 是数据格式,键必须用双引号;JavaScript 对象是编程语言特性,键可以不用引号或用单引号。JSON 不支持函数、undefined、注释等 JavaScript 特有内容。
Q: 为什么 JSON.parse 会报错?
A: 常见原因:1) JSON 格式不正确(缺少引号、多余逗号等);2) 包含单引号而非双引号;3) 包含注释;4) 包含 undefined 或函数等不支持的类型;5) 末尾有多余字符。
Q: JSON 和 XML 如何选择?
A: JSON 更轻量、解析更快、与 JavaScript 天然兼容,适合 Web API;XML 支持注释、命名空间、属性等复杂特性,适合需要严格验证的场景。现代 Web 开发首选 JSON。
Q: 如何处理 JSON 中的特殊字符?
A: JSON 使用反斜杠转义特殊字符:\" 表示双引号,\\ 表示反斜杠,\n 表示换行,\t 表示制表符,\uXXXX 表示 Unicode 字符。大多数 JSON 库会自动处理转义。