JSON 教程
什么是 JSON?
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于 JavaScript 的一个子集,采用完全独立于语言的文本格式,但使用了类似于 C 语言家族的习惯。JSON 易于人阅读和编写,同时也易于机器解析和生成。
JSON 是 Web 开发中最常用的数据格式之一,广泛应用于 API 通信、配置文件、数据存储等场景。
JSON 语法规则
- 数据在名称/值对中
- 数据由逗号分隔
- 花括号
{}保存对象 - 方括号
[]保存数组 - 字符串必须使用双引号
"
基本示例
{
"name": "张三",
"age": 25,
"isStudent": false,
"hobbies": ["读书", "编程", "旅行"],
"address": {
"city": "北京",
"zip": "100000"
}
}
JSON 数据类型
| 类型 | 描述 | 示例 |
|---|---|---|
| 字符串 | 双引号括起来的 Unicode 字符 | "Hello World" |
| 数字 | 整数或浮点数 | 42, 3.14 |
| 布尔值 | true 或 false | true |
| 数组 | 有序的值列表,用方括号 | [1, 2, 3] |
| 对象 | 无序的键值对集合,用花括号 | {"key": "value"} |
| null | 空值 | null |
JSON vs XML 对比
| 特性 | JSON | XML |
|---|---|---|
| 可读性 | 简洁易读 | 较冗长 |
| 数据体积 | 较小 | 较大(有闭合标签) |
| 解析速度 | 快 | 较慢 |
| 数据类型支持 | 原生支持字符串、数字、布尔等 | 所有数据都是文本 |
| 数组支持 | 原生支持 | 需通过重复元素模拟 |
| 注释支持 | 不支持 | 支持 <!-- --> |
| 元数据/属性 | 不支持 | 支持属性 |
| 命名空间 | 不支持 | 支持 |
JSON 在各语言中的使用
JavaScript
// 解析 JSON
const obj = JSON.parse('{"name":"张三"}');
// 生成 JSON
const json = JSON.stringify(obj);
Python
# 解析 JSON
import json
obj = json.loads('{"name": "张三"}')
# 生成 JSON
json_str = json.dumps(obj, ensure_ascii=False)
Java
// 使用 Jackson 库
ObjectMapper mapper = new ObjectMapper();
// 解析 JSON
User user = mapper.readValue(jsonStr, User.class);
// 生成 JSON
String json = mapper.writeValueAsString(user);
C#
// 使用 System.Text.Json
using System.Text.Json;
// 解析 JSON
var user = JsonSerializer.Deserialize<User>(jsonStr);
// 生成 JSON
var json = JsonSerializer.Serialize(user);
Go
// 使用 encoding/json
import "encoding/json"
// 解析 JSON
json.Unmarshal([]byte(jsonStr), &user)
// 生成 JSON
jsonBytes, _ := json.Marshal(user)
JSON 最佳实践
- 始终使用双引号:JSON 要求键和字符串值必须使用双引号,单引号无效。
- 不要使用尾随逗号:最后一个元素后面不要加逗号。
- 避免深层嵌套:过多的嵌套层级会降低可读性和解析效率。
- 使用有意义的键名:使用 camelCase 或 snake_case 命名规范,保持一致性。
- 验证 JSON:始终使用如本工具的 JSON 编辑器验证 JSON 格式。
- 注意数据类型:数字不要加引号,布尔值不要加引号,null 不要加引号。
- 合理使用数组:表示列表数据用数组,表示映射关系用对象。