JSON:数据交换格式
目录
一、什么是 JSON?
二、JSON 语法规则:简单到不用记
三、JSON 支持的数据类型
四、一个完整的 JSON 示例
五、JSON 的常见应用场景
1. 前后端数据交互
2. 配置文件
3. 跨服务数据传输
六、如何处理 JSON?(主流语言工具)
1. JavaScript(原生支持)
2. Java(Jackson / Fastjson)
3. Python(内置 json 模块)
七、JSON 最佳实践(避坑指南)
八、总结
在现代软件开发中,数据交换无处不在 —— 前后端通信、跨服务调用、配置文件存储…… 而 JSON(JavaScript Object Notation) 凭借其简洁、易读、跨语言的特性,成为了当下最流行的数据交换格式。无论你是前端开发者、后端工程师,还是测试人员,掌握 JSON 都是必备技能。
一、什么是 JSON?
JSON(JavaScript 对象表示法)是一种轻量级的数据交换格式,诞生于 2001 年,由 Douglas Crockford 设计。它基于 JavaScript 的对象语法,但独立于编程语言 —— 几乎所有主流语言(Java、Python、Go、JavaScript 等)都有解析和生成 JSON 的库。
核心优势:
- 简洁清晰:比 XML 更紧凑,可读性强,减少数据传输量。
- 跨语言兼容:不依赖特定语言,任何语言都能轻松处理。
- 易于解析:结构规则简单,解析效率高,适合网络传输。
二、JSON 语法规则:简单到不用记
JSON 的语法规则非常简单,记住这几点就能轻松上手:
-
数据以键值对(key-value)形式存在
键(key)必须用双引号包裹,值(value)可以是多种类型(见下文)。
例:"name": "张三"
-
多个键值对用逗号分隔
注意:最后一个键值对后不能加逗号(否则会报错)。 -
对象用大括号
{}
包裹
表示一个 “实体”(如用户、商品),内部是键值对的集合。 -
数组用方括号
[]
包裹
表示一组有序数据,元素可以是任意 JSON 数据类型。 -
区分大小写
键名、关键字(如true
)必须严格小写。
三、JSON 支持的数据类型
JSON 只支持 6 种基本数据类型,覆盖绝大多数场景:
类型 | 说明 | 示例 |
---|---|---|
字符串 | 必须用双引号包裹,支持转义字符(\n 、\" 等) | "username": "zhangsan" |
数字 | 整数或浮点数,不支持八进制 / 十六进制 | "age": 25 、"price": 99.9 |
布尔值 | 只有 true (真)或 false (假) | "isVip": true |
数组 | 有序集合,元素可以是任意 JSON 类型 | "hobbies": ["读书", "跑步"] |
对象 | 无序键值对集合,可嵌套其他对象或数组 | "address": {"city": "北京"} |
null | 表示空值(注意:不是字符串 "null") | "avatar": null |
四、一个完整的 JSON 示例
以下是一个 “用户信息” 的 JSON 示例,包含了所有数据类型,直观感受一下:
{"userId": 1001,"username": "张三","age": 28,"isVip": true,"address": {"province": "北京","city": "北京市","detail": "海淀区中关村"},"hobbies": ["篮球", "编程", "旅行"],"lastLoginTime": "2023-10-01 08:30:00","extInfo": null
}
这个 JSON 描述了一个用户的基本信息:
- 包含简单值(
userId
、age
)、布尔值(isVip
); - 嵌套了对象(
address
)和数组(hobbies
); - 用
null
表示空值(extInfo
)。
五、JSON 的常见应用场景
JSON 几乎渗透到软件开发的各个环节,以下是最典型的场景:
1. 前后端数据交互
前端(如 JavaScript)通过 API 调用后端接口时,后端返回 JSON 格式的数据,前端解析后渲染页面。
例:后端接口返回用户列表:
{"code": 200,"message": "success","data": [{"id": 1, "name": "张三"},{"id": 2, "name": "李四"}]
}
2. 配置文件
相比 XML 或 Properties,JSON 更简洁,常用于存储应用配置(如前端的 package.json
、后端的服务配置)。
例:app.json
配置文件:
{"server": {"host": "localhost","port": 8080},"timeout": 3000,"enableLog": true
}
3. 跨服务数据传输
在微服务架构中,服务之间调用(如通过 HTTP、RPC)时,常用 JSON 作为数据载体,确保不同语言开发的服务能无缝通信。
六、如何处理 JSON?(主流语言工具)
几乎所有语言都有成熟的 JSON 处理库,以下是最常用的工具:
1. JavaScript(原生支持)
JavaScript 内置 JSON
对象,可直接解析 / 生成 JSON:
// JSON 字符串转对象
const jsonStr = '{"name": "张三", "age": 25}';
const obj = JSON.parse(jsonStr); // {name: "张三", age: 25}// 对象转 JSON 字符串
const user = { name: "李四", age: 30 };
const jsonStr2 = JSON.stringify(user); // '{"name":"李四","age":30}'
2. Java(Jackson / Fastjson)
-
Jackson:Spring 官方推荐,功能全面,支持复杂对象转换。
import com.fasterxml.jackson.databind.ObjectMapper;ObjectMapper mapper = new ObjectMapper(); // 对象转 JSON String json = mapper.writeValueAsString(user); // JSON 转对象 User user = mapper.readValue(json, User.class);
-
Fastjson:阿里巴巴开发,解析速度快,适合简单场景。
import com.alibaba.fastjson.JSON;// 对象转 JSON String json = JSON.toJSONString(user); // JSON 转对象 User user = JSON.parseObject(json, User.class);
3. Python(内置 json 模块)
Python 自带 json
库,操作简单:
import json# JSON 字符串转字典
json_str = '{"name": "张三", "age": 25}'
data = json.loads(json_str) # {'name': '张三', 'age': 25}# 字典转 JSON 字符串
user = {'name': '李四', 'age': 30}
json_str2 = json.dumps(user, ensure_ascii=False) # 解决中文乱码
七、JSON 最佳实践(避坑指南)
-
保持格式规范
- 键必须用双引号(单引号会报错);
- 数组 / 对象最后一个元素后不要加逗号;
- 避免 trailing comma(尾逗号),部分解析器不支持。
-
控制嵌套深度
嵌套过深(如超过 5 层)会降低可读性,增加解析难度,建议扁平化处理。 -
处理特殊数据类型
- 日期:建议用字符串(如
yyyy-MM-dd HH:mm:ss
),避免时间戳(可读性差); - 二进制数据:不要直接放 JSON 中,建议用 Base64 编码或存储为文件链接。
- 日期:建议用字符串(如
-
避免注释
JSON 标准不支持注释(//
或/* */
),如需注释可通过额外键(如"__comment": "说明"
)实现。 -
格式化输出
开发环境中用格式化工具(如 VS Code 的 Prettier)美化 JSON,生产环境可压缩为一行减少传输量。
八、总结
JSON 之所以成为主流数据交换格式,核心在于它的 “平衡”—— 既足够简单(学习成本低),又能满足绝大多数场景需求(支持复杂结构)。
掌握 JSON 不需要死记硬背,记住它的语法规则,熟悉所在语言的处理工具,再结合实际场景多写多练,很快就能运用自如。无论是前后端开发、接口测试还是配置管理,JSON 都是你绕不开的 “好帮手”。