JSON 核心知识点
JSON(JavaScript Object Notation)是当下数据交换的 “通用语言”,在前后端交互、数据存储等场景中无处不在。本文将从 JSON 基础、Java 生态中的 FastJSON 应用,到前端 JS 操作 JSON 全方位梳理核心知识点。
一、初识 JSON:是什么 & 为什么用它
1. JSON 介绍
- 定义:JSON 是一种轻量级、纯文本的数据交换格式,基于 JavaScript 对象语法,但完全独立于编程语言(几乎所有语言都有 JSON 解析 / 生成工具)。
- 核心优势:
- 语法简洁易读(比 XML 更轻量,无冗余标签)。
- 解析速度快(编程语言原生支持或有高性能库)。
- 跨平台 / 跨语言兼容(前后端、多语言系统间数据传输的首选)。
2. JSON 格式:严格的语法规则
JSON 数据只有两种结构,且语法必须严格遵循(否则解析会报错):
- 对象结构:用
{}包裹,由 “键值对” 组成,键必须是字符串(双引号包裹),值可以是字符串、数字、布尔、数组、对象或null。{"name": "张三","age": 25,"isStudent": false,"hobbies": ["篮球", "音乐"],"address": {"city": "北京","district": "朝阳区"},"nickname": null } - 数组结构:用
[]包裹,元素可以是对象、字符串、数字等任意 JSON 类型。[{ "id": 1, "name": "苹果" },{ "id": 2, "name": "香蕉" } ]
语法禁忌:
- 键必须用双引号(单引号或无引号都不合法)。
- 字符串值必须用双引号(同键的要求)。
- 末尾不能有多余逗号(如
{"a":1, "b":2,}不合法)。
二、FastJSON:Java 生态的 JSON 处理利器
FastJSON 是阿里巴巴开源的 Java 高性能 JSON 库,以解析快、使用简单著称,广泛应用于 Java 后端系统的 JSON 编解码场景。
1. Java 对象 ↔ JSON 字符串(序列化)
将 Java 对象转换为 JSON 字符串,称为 “序列化”。
import com.alibaba.fastjson.JSON;public class User {private String name;private Integer age;// 省略 getter/setter
}// 1. 创建 Java 对象
User user = new User();
user.setName("张三");
user.setAge(25);// 2. 转换为 JSON 字符串
String jsonStr = JSON.toJSONString(user);
System.out.println(jsonStr);
// 输出:{"age":25,"name":"张三"}
进阶配置:
- 格式化输出:
JSON.toJSONString(user, true)(带缩进和换行,便于调试)。 - 排除字段:在类字段上加
@JSONField(serialize = false),该字段不会被序列化到 JSON 中。
2. JSON 字符串 ↔ Java 对象(反序列化)
将 JSON 字符串转换为 Java 对象,称为 “反序列化”。
import com.alibaba.fastjson.JSON;// JSON 字符串
String jsonStr = "{\"age\":25,\"name\":\"张三\"}";// 转换为 Java 对象
User user = JSON.parseObject(jsonStr, User.class);
System.out.println(user.getName()); // 输出:张三
复杂场景:
- 集合反序列化:
List<User> userList = JSON.parseArray(jsonArrayStr, User.class); - 泛型反序列化:借助
TypeReference处理泛型(如Map<String, Object>):Map<String, Object> map = JSON.parseObject(jsonStr, new TypeReference<Map<String, Object>>(){});
三、JS 操作 JSON 对象:前端数据处理必备
在 JavaScript 中,JSON 是 “一等公民”—— 语言原生支持 JSON 的解析与生成,无需额外依赖。
1. JSON 字符串 ↔ JS 对象
- 字符串转对象:
JSON.parse()const jsonStr = '{"name":"张三","age":25}'; const user = JSON.parse(jsonStr); console.log(user.name); // 输出:张三 - 对象转字符串:
JSON.stringify()const user = { name: "张三", age: 25 }; const jsonStr = JSON.stringify(user); console.log(jsonStr); // 输出:{"name":"张三","age":25}
进阶用法:
- 过滤字段:
JSON.stringify(user, ["name"])(仅保留name字段)。 - 格式化输出:
JSON.stringify(user, null, 2)(缩进 2 个空格,便于阅读)。
2. 实战场景:前后端 JSON 交互
前端通过 AJAX 从后端获取 JSON 数据后,可直接解析并渲染页面:
// 假设通过 fetch 获取后端 JSON 数据
fetch("/api/user").then(response => response.json()) // 自动解析 JSON 字符串为 JS 对象.then(user => {// 渲染到页面document.getElementById("username").innerText = user.name;document.getElementById("age").innerText = user.age;});
前端提交数据到后端时,需将 JS 对象转为 JSON 字符串:
const user = { name: "李四", age: 30 };
fetch("/api/user", {method: "POST",headers: { "Content-Type": "application/json" },body: JSON.stringify(user) // 转为 JSON 字符串发送
});
四、总结:JSON 学习与应用的核心逻辑
- 基础层:掌握 JSON 严格的语法规则(对象、数组结构,双引号要求等)。
- Java 层:FastJSON 实现 Java 对象与 JSON 字符串的双向转换,重点掌握
toJSONString和parseObject方法。 - JS 层:利用
JSON.parse和JSON.stringify完成前端与 JSON 数据的交互,结合 AJAX 实现前后端数据流转。
JSON 作为数据交换的 “通用语言”,是前后端开发的必备技能。无论是调试接口、处理数据存储,还是跨系统交互,吃透 JSON 都能让你事半功倍。
