JSON详解

目录

[一. JSON简述](#一. JSON简述)

[二. XML和JSON的区别](#二. XML和JSON的区别)

[三. JSON的语法格式](#三. JSON的语法格式)

[3.1 JSON语法格式](#3.1 JSON语法格式)

[3.2 单个JSON对象](#3.2 单个JSON对象)

[3.3 数组存储JSON数据](#3.3 数组存储JSON数据)

[四. JSON数据与Java的相互转化](#四. JSON数据与Java的相互转化)

[4.1 hutool工具包](#4.1 hutool工具包)

[4.2 fastjson 工具包](#4.2 fastjson 工具包)


一. JSON简述

JSON (JavaScript Object Notation,JS对象简谱)是一种轻量级的数据交换格式。它基于ECMAScript(欧洲计算机协会制定的IS规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

现如今,绝大部分互联网前后端数据传输都是采用JSON数据格式进行传输,如下图所示,Response 中的数据正是JSON格式数据。

JSON的特点:

  1. JSON是一种轻量级的数据交换格式;
  2. JSON采用完全独立于语言的文本格式,就是说不同的编程语言JSON数据是一致的;
  3. JSON易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率);

二. XML和JSON的区别

相同点:都可以作为一种数据交换格式;

不同点:

  1. XML是重量级的,JSON是轻量级的,XML在传输过程中比较占带宽,JSON占带宽少,易于压缩。
  2. XML和ISON都用在项目交互下,XML多用于做配置文件,ISON用于数据交互。

三. JSON的语法格式

3.1 JSON语法格式

JSON语法格式有严格的要求,只有遵循以下几点才能被称为一个JSON对象。

  1. 外面由括起来;
  2. 数据以"键:值"对的形式出现(其中键多以字符串形式出现,值可取字符串,数值,甚至其他JSON对象);
  3. 每两个"键:值"对以逗号分隔(最后一个"键:值"对省略逗号);
  4. 参数值如果是string类型,就必须加引号,如果是数字类型,引号可加可不加;

在前端开发过程中,经常会用到JSON来定义对象和对象属性,并定义在<script><script>标签之内;

3.2 单个JSON对象

如下示例代码,定义了一个简单的 person 对象,它的作用等同于Java中定义了一个 Person 类的实例对象

javascript 复制代码
HTML代码省略......
<script>
    let person = {
        "name":"zhangsan",
        "age":"18",
        "email":"@qq.com"
    }
    console.log(person);
</script>

然后我们保存此页面,到浏览器中打开开发者工具找到控制台,然后刷新页面,就可以在 console 控制台看到的输出出来的 person 对象;

3.3 数组存储JSON数据

实际开发过程中,我们从数据库中查到的数据量往往会很大,我们会将数据存储到ArrayList中,在返回给前端时,前端会将集合中的每个对象都转化为一个个JSON对象。

如下所示,我们从数据库中查到三条记录,使用List接收返回给前端,前端 Response 响应体中得到的结果就和下面有些类似了,"[]"表示数组。数组中每个"{}"又单独表示一个个JSON对象。

javascript 复制代码
        let productInfo = {
              "productCategory":"电脑",
              "productList":[
                  {
                      "computerId":"101",
                      "computerName":"拯救者",
                      "computerPrice":"7500",
                  },
                  {
                      "computerId":"102",
                      "computerName":"华为",
                      "computerPrice":"6000",
                  },
                  {
                      "computerId":"103",
                      "computerName":"外星人",
                      "computerPrice":"10500",
                  },
              ],
          }

四. JSON数据与Java的相互转化

在开发过程中,我们常常会碰到JSON格式的数据与JavaBean格式的实体类之间的相互转化,此时我们就可以借助第三方工具包提供的现有API来提高我们的开发效率。这里我推荐两个大家比较常用的依赖包。

4.1 hutool工具包

常说糊涂工具包,里面不仅提供了JSON与Java互相转化的API,还提供了各种判空数组、判空字符串、日期格式化等众多小巧好用的API,非常推荐同学我们在日常练习的时候导包使用里面的API;

XML 复制代码
<!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.32</version>
</dependency>

糊涂工具包提供了 JSONUtil 工具类;

JSONUtil.toBean() 方法将JSON格式数据转化为JavaBean实体对象;

JSONUtil.toJsonStr() 方法将JavaBean实体对象转化为JSON字符格式数据;

4.2 fastjson 工具包

fastjson工具包是由阿里巴巴提供的一个第三方工具包,依赖地址如下

XML 复制代码
<dependency>
     <groupId>com.alibaba.fastjson2</groupId>
     <artifactId>fastjson2</artifactId>
     <version>2.0.52</version>
</dependency>

JSON.prase() 方法将JSON格式数据转化为JavaBean实体对象;

JSON.toJSONString() 方法将JavaBean实体对象转化为JSON字符格式数据;

相关推荐
奔跑的呱呱牛14 小时前
arcgis-to-geojson双向转换工具库
arcgis·json
武超杰17 小时前
SpringMVC核心功能详解:从RESTful到JSON数据处理
后端·json·restful
还是大剑师兰特1 天前
Vue3 前端专属配置(VSCode settings.json + .prettierrc)
前端·vscode·json
qq_283720052 天前
Cesium实战(三):加载天地图(影像图,注记图)避坑指南
json·gis·cesium
雷帝木木2 天前
Flutter for OpenHarmony:Flutter 三方库 cbor 构建 IoT 设备的极致压缩防窃协议(基于标准二进制 JSON 表达格式)
网络·物联网·flutter·http·json·harmonyos·鸿蒙
长安11082 天前
JsonCpp的编译与使用
json
凌晨一点的秃头猪2 天前
JSON 文件基础介绍
json
凌晨一点的秃头猪2 天前
Python JSON 模块核心函数超详细指南
json
小江的记录本2 天前
【JWT】JWT(JSON Web Token)结构化知识体系(完整版)
前端·网络·web安全·http·网络安全·json·安全架构
早點睡3902 天前
ReactNative项目OpenHarmony三方库集成实战:react-native-json-tree
react native·react.js·json