当前位置: 首页 > news >正文

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

http://www.dtcms.com/a/519957.html

相关文章:

  • precompilation-headers 以及在cmake中的实现
  • php做的网站用什么后台ui设计是怎么实现的
  • 怎么建设宣传网站网页制作公司兼职
  • llama.cpp批处理选择不同模型启动
  • 《从零构建企业级 Java+DeepSeek 智能应用:SpringBoot/Vert.x 双引擎实战,打造热榜级 AI 开发指南》
  • 【存储概念】存储系统中块设备、分区、文件系统的概念及关系
  • (第二篇)Spring AI 基础入门:从环境搭建到模型接入全攻略(覆盖国内外模型 + 本地部署)
  • 容器适配器:Stack与Queue的底层奥秘
  • 2025年10月23日Github流行趋势
  • 上海外贸网站建设公司价格做兼职设计去哪个网站
  • 免费效果图网站wordpress分类目录导航
  • 【完整源码+数据集+部署教程】【运动的&足球】足球比赛分析系统源码&数据集全套:改进yolo11-RFAConv
  • YARN简介
  • PSO-Transformer-BiLSTM分类预测/故障诊断,优化参数为注意力机制头数、学习率、正则化系数、隐藏层单元,图很多,包括分类效果图,混淆矩阵图
  • AJAX 知识
  • 做淘宝推广开网站合适全球最大的设计网站
  • Java-157 MongoDB 存储引擎 WiredTiger vs InMemory:何时用、怎么配、如何验证 mongod.conf
  • 详细-vue3项目初始化配置流程
  • 电子科技网站太原seo排名
  • 销售记账-成本中心/成本会计分配
  • TensorFlow深度学习实战——链路预测
  • 广州网站建设公司品牌太和县建设局网站
  • 帝国网站的互动专栏怎么做做ppt兼职网站
  • SpringBoot-数据访问之JDBC
  • Linux操作系统-父进程的等待:一个关于回收与终结的故事
  • Adobe After Effects 2025(AE2025解锁版) 电影级特效
  • 云栖实录 | DataWorks 发布下一代 Data+AI 一体化平台,开启企业智能数据新时代
  • uv add openai 和 uv pip install openai 的区别
  • 安装了conda和uv如何创建一个项目?
  • 策略模式解决的核心问题是什么?