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 都能让你事半功倍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值