JSON(JavaScript Object Notation)已经成为现代Web开发中最流行的数据交换格式。无论是API接口、配置文件还是数据存储,JSON都无处不在。本文将从基础到高级,全面讲解JSON的所有知识点,帮助你成为JSON专家。
JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript的一个子集,但已经成为独立于语言的通用数据格式。
JSON支持以下6种数据类型:
{
"string": "Hello, JSON", // 字符串
"number": 123, // 数字
"boolean": true, // 布尔值
"null": null, // 空值
"object": { // 对象
"name": "KodaTools",
"version": "1.0"
},
"array": [1, 2, 3, 4, 5] // 数组
}
字符串必须使用双引号包围,支持转义字符:
{
"name": "KodaTools",
"description": "A \"powerful\" tool",
"path": "C:\\Users\\Documents",
"unicode": "\u4e2d\u6587"
}
JSON支持整数和浮点数:
{
"integer": 123,
"negative": -456,
"float": 3.14159,
"exponent": 2.998e8
}
只有true和false两个值,必须小写:
{
"enabled": true,
"disabled": false
}
表示空值或不存在:
{
"middleName": null
}
对象是无序的键值对集合:
{
"user": {
"id": 1,
"name": "张三",
"email": "zhangsan@example.com"
}
}
数组是有序的值集合:
{
"users": [
{"id": 1, "name": "张三"},
{"id": 2, "name": "李四"},
{"id": 3, "name": "王五"}
]
}
const obj = {
name: "KodaTools",
version: "1.0",
features: ["JSON", "Base64", "MD5"]
};
// 基本转换
const json = JSON.stringify(obj);
console.log(json);
// 输出: {"name":"KodaTools","version":"1.0","features":["JSON","Base64","MD5"]}
// 格式化输出
const prettyJson = JSON.stringify(obj, null, 2);
console.log(prettyJson);
// 输出:
// {
// "name": "KodaTools",
// "version": "1.0",
// "features": [
// "JSON",
// "Base64",
// "MD5"
// ]
// }
const jsonString = '{"name":"KodaTools","version":"1.0"}';
// 解析JSON
const obj = JSON.parse(jsonString);
console.log(obj.name); // 输出: KodaTools
console.log(obj.version); // 输出: 1.0
// 处理解析错误
try {
const obj = JSON.parse('invalid json');
} catch (error) {
console.error('JSON解析错误:', error.message);
}
import json
# Python对象转JSON字符串
data = {
"name": "KodaTools",
"version": "1.0",
"features": ["JSON", "Base64", "MD5"]
}
# 基本转换
json_string = json.dumps(data)
print(json_string)
# 格式化输出
pretty_json = json.dumps(data, indent=2, ensure_ascii=False)
print(pretty_json)
# JSON字符串转Python对象
parsed_data = json.loads(json_string)
print(parsed_data['name']) # 输出: KodaTools
# 读写JSON文件
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(data, f, indent=2, ensure_ascii=False)
with open('data.json', 'r', encoding='utf-8') as f:
loaded_data = json.load(f)
print(loaded_data)
Java中常用的JSON库有Jackson、Gson和Fastjson。以下是使用Jackson的示例:
import com.fasterxml.jackson.databind.ObjectMapper;
// 创建ObjectMapper
ObjectMapper mapper = new ObjectMapper();
// Java对象转JSON字符串
Map<String, Object> data = new HashMap<>();
data.put("name", "KodaTools");
data.put("version", "1.0");
String jsonString = mapper.writeValueAsString(data);
System.out.println(jsonString);
// JSON字符串转Java对象
Map<String, Object> parsedData = mapper.readValue(jsonString, Map.class);
System.out.println(parsedData.get("name"));
// 读写JSON文件
mapper.writeValue(new File("data.json"), data);
Map<String, Object> loadedData = mapper.readValue(new File("data.json"), Map.class);
JSON是RESTful API的标准数据格式:
// 请求
POST /api/users
Content-Type: application/json
{
"name": "张三",
"email": "zhangsan@example.com",
"age": 25
}
// 响应
{
"success": true,
"data": {
"id": 123,
"name": "张三",
"email": "zhangsan@example.com",
"age": 25,
"createdAt": "2026-03-28T10:00:00Z"
},
"message": "用户创建成功"
}
JSON常用于配置文件,如package.json、tsconfig.json等:
{
"name": "kodatools",
"version": "1.0.0",
"description": "在线工具箱",
"main": "index.js",
"scripts": {
"start": "node server.js",
"test": "jest"
},
"dependencies": {
"express": "^4.18.0",
"lodash": "^4.17.21"
}
}
NoSQL数据库(如MongoDB)使用JSON格式存储数据:
// MongoDB文档
{
"_id": ObjectId("507f1f77bcf86cd799439011"),
"title": "JSON教程",
"content": "JSON完全指南...",
"author": {
"name": "KodaTools",
"email": "admin@kodatools.com"
},
"tags": ["JSON", "教程", "编程"],
"createdAt": ISODate("2026-03-28T10:00:00Z"),
"views": 1234
}
前端使用fetch API发送JSON数据:
// 发送JSON数据
async function createUser(userData) {
try {
const response = await fetch('/api/users', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(userData)
});
const result = await response.json();
console.log('创建成功:', result);
} catch (error) {
console.error('请求失败:', error);
}
}
// 调用
createUser({
name: '张三',
email: 'zhangsan@example.com'
});
KodaTools提供了强大的JSON处理工具,帮助你快速处理JSON数据:
除了KodaTools,还有其他优秀的在线JSON工具:
主流IDE都有JSON相关插件:
// ❌ 错误:使用单引号
{'name': 'KodaTools'}
// ✅ 正确:使用双引号
{"name": "KodaTools"}
// ❌ 错误:最后一个元素后有逗号
{
"name": "KodaTools",
"version": "1.0",
}
// ✅ 正确:最后一个元素后无逗号
{
"name": "KodaTools",
"version": "1.0"
}
// ❌ 错误:注释
{
"name": "KodaTools", // 这是注释
"version": "1.0"
}
// ✅ 正确:JSON不支持注释
{
"name": "KodaTools",
"version": "1.0"
}
处理大型JSON数据时,需要注意性能优化:
// ❌ 不好的做法:多次解析
const data = JSON.parse(jsonString);
const name = JSON.parse(jsonString).name;
const version = JSON.parse(jsonString).version;
// ✅ 好的做法:解析一次,多次使用
const data = JSON.parse(jsonString);
const name = data.name;
const version = data.version;
// 流式解析大型JSON文件
const fs = require('fs');
const JSONStream = require('JSONStream');
const stream = fs.createReadStream('large.json', {encoding: 'utf8'});
const parser = JSONStream.parse('items.*');
parser.on('data', (item) => {
console.log(item);
});
stream.pipe(parser);
永远不要使用eval()解析JSON,这会导致代码注入风险:
// ❌ 危险:使用eval()
const obj = eval('(' + jsonString + ')');
// ✅ 安全:使用JSON.parse()
const obj = JSON.parse(jsonString);
// JavaScript对象
const jsObj = {
name: 'KodaTools', // 键可以不加引号
version: '1.0',
method: function() { // 可以包含方法
return this.name;
},
[Symbol('key')]: 'value' // 可以使用Symbol作为键
};
// JSON
const jsonObj = {
"name": "KodaTools", // 键必须加双引号
"version": "1.0"
// 不能包含方法
// 不能使用Symbol作为键
};
JSON Schema是一种用于描述JSON数据结构的规范,可以用于验证JSON数据的格式和内容。
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "用户信息",
"description": "用户信息Schema",
"type": "object",
"properties": {
"id": {
"type": "integer",
"description": "用户ID"
},
"name": {
"type": "string",
"description": "用户名",
"minLength": 1,
"maxLength": 50
},
"email": {
"type": "string",
"format": "email",
"description": "邮箱地址"
},
"age": {
"type": "integer",
"minimum": 0,
"maximum": 150,
"description": "年龄"
}
},
"required": ["id", "name", "email"]
}
const Ajv = require('ajv');
const ajv = new Ajv();
const schema = {
type: "object",
properties: {
name: {type: "string"},
age: {type: "number"}
},
required: ["name"]
};
const validate = ajv.compile(schema);
const validData = {name: "张三", age: 25};
const invalidData = {age: 25};
console.log(validate(validData)); // true
console.log(validate(invalidData)); // false
console.log(validate.errors); // 错误信息
// ✅ 好的命名
{
"userName": "张三",
"createdAt": "2026-03-28T10:00:00Z",
"isActive": true
}
// ❌ 不好的命名
{
"user_name": "张三",
"created_at": "2026-03-28T10:00:00Z",
"is_active": true
}
API响应中包含版本信息:
{
"version": "2.0",
"data": {
// 数据内容
}
}
统一的错误响应格式:
{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "邮箱格式不正确",
"details": {
"field": "email",
"value": "invalid-email"
}
}
}
JSON作为现代Web开发的核心数据格式,掌握它的所有知识点对于每个开发者都至关重要。从基础的语法到高级的Schema验证,从简单的数据交换到复杂的API设计,JSON无处不在。
希望这篇JSON完全指南能帮助你全面掌握JSON的所有知识点。如果你需要处理JSON数据,别忘了使用KodaTools的JSON格式化工具,它可以帮助你快速格式化、验证和处理JSON数据。
如果你有任何问题或建议,欢迎在评论区留言讨论。
← 返回博客列表