JSON 基本介绍:结构、用途及编码技巧
在软件开发中,JSON(JavaScript Object Notation) 已成为数据存储与传输的主流格式。无论是前端与后端的通信,还是跨平台的数据交互,JSON 都凭借其 轻量级、易读、易解析 的特性成为首选。
目录
一、什么是 JSON?
1. JSON 概述
JSON(JavaScript Object Notation)是一种基于 键值对 的数据格式,主要用于 数据存储和交换。虽然 JSON 起源于 JavaScript,但目前几乎所有编程语言(Python、Java、C++、Go)都支持 JSON。
2. JSON 的特点
✅ 轻量级:比 XML 更简洁,适用于 Web 数据传输。
✅ 易解析:可被 JavaScript 直接解析,也能转换为各种编程语言的数据结构。
✅ 可读性强:语法简单,易于理解。
✅ 跨语言支持:广泛应用于前后端通信、API 交互、配置文件等场景。
二、JSON 的基本语法与格式
1. JSON 结构
JSON 的数据结构主要由两种类型组成:
- 对象(Object):由
{}
包围的 键值对集合,类似 JavaScript 对象。 - 数组(Array):由
[]
包围的 值的集合,类似 JavaScript 数组。
{
"name": "Alice",
"age": 25,
"isStudent": false,
"skills": ["JavaScript", "Python", "Java"],
"address": {
"city": "Shanghai",
"zipCode": "200000"
}
}
2. JSON 数据类型
JSON 仅支持以下数据类型:
JSON 数据类型 | 示例 |
---|---|
字符串(String) | "name": "Alice" |
数字(Number) | "age": 25 |
布尔值(Boolean) | "isStudent": false |
数组(Array) | "skills": ["JS", "Python"] |
对象(Object) | "address": { "city": "Shanghai" } |
null | "data": null |
⚠️ 注意:
- JSON 的字符串必须使用双引号
""
,不能使用单引号'
。 - JSON 的 key 也必须用双引号包裹,不像 JavaScript 对象可以省略。
三、JSON 编码与解析(Coding 方法)
不同的编程语言提供了丰富的 JSON 解析和编码工具,下面介绍几种常见方式。
1. JavaScript 中的 JSON 解析与编码
(1) JSON 字符串转换为 JavaScript 对象
const jsonString = '{"name": "Alice", "age": 25}';
const user = JSON.parse(jsonString);
console.log(user.name); // 输出:Alice
(2) JavaScript 对象转换为 JSON 字符串
const user = { name: "Alice", age: 25 };
const jsonString = JSON.stringify(user);
console.log(jsonString); // 输出:{"name":"Alice","age":25}
2. Python 中的 JSON 解析与编码
(1) 解析 JSON(字符串 -> Python 字典)
import json
json_string = '{"name": "Alice", "age": 25}'
user = json.loads(json_string)
print(user["name"]) # 输出:Alice
(2) Python 对象转换为 JSON
user = {"name": "Alice", "age": 25}
json_string = json.dumps(user, indent=4) # 格式化 JSON 输出
print(json_string)
3. Java 中的 JSON 解析
Java 常用 Jackson 或 Gson 解析 JSON。
(1) 使用 Jackson
import com.fasterxml.jackson.databind.ObjectMapper;
ObjectMapper objectMapper = new ObjectMapper();
String jsonString = "{\"name\":\"Alice\",\"age\":25}";
// JSON 转换为 Java 对象
User user = objectMapper.readValue(jsonString, User.class);
// Java 对象转换为 JSON
String jsonOutput = objectMapper.writeValueAsString(user);
System.out.println(jsonOutput);
4. C++ 中的 JSON 解析
C++ 可以使用 nlohmann/json
库:
#include <iostream>
#include <nlohmann/json.hpp>
int main() {
std::string jsonString = R"({"name": "Alice", "age": 25})";
auto user = nlohmann::json::parse(jsonString);
std::cout << "Name: " << user["name"] << std::endl;
}
四、JSON 的用途与应用场景
1. API 数据交换
JSON 是 RESTful API、GraphQL 主要的数据格式:
{
"status": "success",
"data": {
"id": 101,
"username": "alice"
}
}
2. 配置文件
许多应用程序(如 VS Code、ESLint、webpack)使用 JSON 作为配置格式:
{
"editor.fontSize": 14,
"theme": "dark"
}
3. 数据存储
MongoDB 等 NoSQL 数据库使用 JSON 结构存储数据:
{
"_id": "5f2c10f5e89b9",
"title": "JSON Guide",
"tags": ["programming", "JSON"]
}
4. 日志格式
JSON 也常用于日志存储:
{
"timestamp": "2025-02-05T10:00:00Z",
"level": "INFO",
"message": "User login successful",
"user": "alice"
}
五、JSON 进阶扩展
1. JSON Schema(JSON 结构验证)
用于约束 JSON 结构:
{
"type": "object",
"properties": {
"name": { "type": "string" },
"age": { "type": "integer" }
},
"required": ["name", "age"]
}
2. JSON 与 YAML 的对比
特性 | JSON | YAML |
---|---|---|
语法风格 | 严格格式,键值对必须加引号 | 更自由,缩进表示层级 |
解析速度 | 快速 | 稍慢 |
可读性 | 适中 | 更适合手写 |
用途 | API、数据存储 | 配置文件(如 Kubernetes) |
六、总结
🚀 JSON 是现代开发中不可或缺的工具,其 轻量级、易读、易解析 的特性使其广泛应用于 API、配置文件、数据存储 等场景。
📌 无论是 JavaScript、Python、Java 还是 C++,都能轻松解析 JSON 数据,我们应熟练掌握 JSON 结构和编码方法,以提升在实际开发中的效率!