【开发】JavaWeb开发中如何解析JSON格式数据

news2024/10/1 17:15:38

目录

前言

JSON 的数据类型

Java 解析 JSON

常用于解析 JSON 的第三方库

Jackson

 Gson

Fastjson

使用 Fastjson

Fastjson 的优点

Fastjson 的主要对象

JSON 接口

JSONObject 类

JSONArray 类


前言

1W:什么是JSON?

  • JSONJavaScrip t对象表示法(JavaScript Object Notation);

  • JSON 是一种轻量级的数据交换格式;

  • 它基于 ECMAScriptEuropean Computer Manufacturers Association,欧洲计算机协会制定的 JavaScript 规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据;

2W:为什么使用JSON?

  • JSON 作为数据传输在浏览器端非常方便;

  • JSON 只允许使用 UTF-8 编码,不存在编码问题;

  • JSON 在语法上与 JavaScript 创建对象相同,JavaScript 程序能够使用内建的 eval() 函数,用 JSON 数据来生成原生的 JavaScirpt 对象;

  • 绝大多数 REST API 都选择 JSON 作为数据传输格式;

3W:JSON如何使用?

JSON 的实例,如下面代码所示

{
    "student":[
    {"name":"关山岳","age":18},
    {"name":"宏满江","age":20}
    ]
}
  • 使用大括号 { } 保存对象,每个对象由若干数据组成

  • 每个数据由 key:value 键值对组成

  • 数据之间使用逗号 分隔

  • 使用 \ 进行特殊字符的转义

  • 使用中括号 [ ] 保存数组(集合),数组(集合)可以包含多个对象


JSON 的数据类型

  • 数字(整数与浮点数)

  • 字符串(在双引号 " "中)

  • 逻辑值(true | false

  • 数组(在中括号 [ ] 中)

  • 对象(在大括号 { } 中)

  • null


Java 解析 JSON

需求:Java 对象与 JSON 格式的数据之间的相互转换

常用于解析 JSON 的第三方库

  • Jackson

maven 中央仓库:

jackson.jaricon-default.png?t=N7T8https://repo1.maven.org/maven2/org/codehaus/jackson/jackson-core-asl/1.9.13/

Jackson 的依赖坐标:

<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-core-asl</artifactId>
    <version>1.9.13</version>
</dependency>

  •  Gson

maven 中央仓库:

gson.jaricon-default.png?t=N7T8https://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.5/

Gson 的依赖坐标:

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.5</version>
</dependency>

  • Fastjson

maven 中央仓库:

fastjson.jaricon-default.png?t=N7T8https://repo1.maven.org/maven2/com/alibaba/fastjson2/fastjson2/2.0.25/

Fastjson 的依赖坐标:

<dependency>
    <groupId>com.alibaba.fastjson2</groupId>
    <artifactId>fastjson2</artifactId>
    <version>2.0.25</version>
</dependency>

使用 Fastjson

Fastjson 是阿里巴巴开源 JSON 解析库,可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 JavaBean

Fastjson 的优点

  • 速度快:Fastjson 相对其他 JSON 库的特点是快,从2011年 fastjson 发布1.1.x版本之后,其性能从未被其他Java实现的 JSON 超越;

  • 使用广泛:Fastjson 在阿里巴巴大规模使用,在数万台服务器上部署,fastjson 在业界被广泛接受。在2012年被开源中国评选为最受欢迎的国产开源软件之一;

  • 测试完备:Fastjson 有非常多的 testcase,在1.2.11版本中,testcase 超过3321个。每次发布都会进行回归测试,保证质量稳定;

  • 使用简单:FastjsonAPI 十分简洁;

  • 功能完备:支持泛型,支持流处理超大文本,支持枚举,支持序列化和反序列化扩展;

Fastjson 的主要对象

Fastjson 主要使用 JSON 接口,JSONObject 类、JSONArray 类;

  • JSON 接口:提供 json 解析操作的入口方法,用于原始转换;

  • JSONObject 类:封装 json 格式的对象;

  • JSONArray 类:封装 json 格式的集合;


JSON 接口

JSON 接口的主要作用:

  • Java 对象序列化为 JSON 字符串

  • JSON 字符串反序列化为 Java 对象

JSON.toJSONString(Object object)将Java对象序列化为JSON字符串

package com.ape.app;

import com.alibaba.fastjson2.JSON;
import com.ape.bean.Student;

/**
 * @author MitsueHong
 * @version 1.0
 * @since 2024/3/7
 */
public class TestJson {
    public static void main(String[] args) {
        //实例化对象
        Student student = new Student();
        student.setStu_name("关中雪");
        student.setStu_sex(1);
        student.setStu_age(22);

        //转换为json格式的字符串
        String stuJson = JSON.toJSONString(student);
        System.out.println(stuJson);
    }

}

JSON.parseObject(String text)将 JSON 字符串反序列化为 Java 对象

package com.ape.app;

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.ape.bean.Student;

/**
 * @author MitsueHong
 * @version 1.0
 * @since 2024/3/7
 */
public class TestJson {
    public static void main(String[] args) {
        //json格式数据
        String jsonStr ="{\"stu_name\":\"日薄西山\",\"stu_sex\":\"1\",\"stu_age\":\"24\"}";

        //转换为java对象
        JSONObject jsonObject = JSON.parseObject(jsonStr);
        System.out.println("名称:"+jsonObject.getString("stu_name"));
        System.out.println("性别:"+jsonObject.getString("stu_sex"));
        System.out.println("年龄:"+jsonObject.getString("stu_age"));

    }

}

JSON.parseArray(String text)将 JSON 字符串反序列化为 JSONArray 集合数组

package com.ape.app;

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;

/**
 * @author MitsueHong
 * @version 1.0
 * @since 2024/3/7
 */
public class TestJson {
    public static void main(String[] args) {

        //json格式数据
        String jsonStr ="[{\"stu_name\":\"日薄西山\",\"stu_sex\":\"1\",\"stu_age\":\"24\"}," +
                "{\"stu_name\":\"凯楠印象\",\"stu_sex\":\"1\",\"stu_age\":\"25\"}," +
                "{\"stu_name\":\"陈安\",\"stu_sex\":\"1\",\"stu_age\":\"25\"}]";

        //转换成JSONArray
        JSONArray jsonArray = JSON.parseArray(jsonStr);
        for(int i=0;i<jsonArray.size();i++) {
            JSONObject object = jsonArray.getJSONObject(i);
            System.out.println(object);
        }
    }

}

 JSONObject

JSONObject 类主要用于封装 key-value 键值对数据,它继承自 LinkedHashMap 接口,所以对它的理解和使用,可以参考 Map 集合。

常用方法

  • getString(String key)

  • remove(Object key)

 JSON.parseObject(String text,Class<T> objectClass)

        //json格式数据
        String jsonStr ="{\"stu_name\":\"日薄西山\",\"stu_sex\":\"1\",\"stu_age\":\"24\"}";

        //转换为java对象
        Student student = JSON.parseObject(jsonStr,Student.class);
        System.out.println("名称:"+student.getStu_name());
        System.out.println("性别:"+student.getStu_sex());
        System.out.println("年龄:"+student.getStu_age());


JSONArray

JSONArrayJSON 数组,JSON 数组对象中存储的是若干个 JSONObject 对象,所以类中的方法主要用于直接操作 JSONObject 对象,主要用于封装数组集合类的数据,继承自 ArrayList 类。

常用方法getJSONObject(int index)

 JSON.parseArray(String text,Class<T> objectClass)

        //json格式数据
        String jsonStr ="[{\"stu_name\":\"日薄西山\",\"stu_sex\":\"1\",\"stu_age\":\"24\"}," +
                "{\"stu_name\":\"凯楠印象\",\"stu_sex\":\"1\",\"stu_age\":\"25\"}," +
                "{\"stu_name\":\"陈安\",\"stu_sex\":\"1\",\"stu_age\":\"25\"}]";

        //转换成JSONArray
        List<Student> studentList = JSON.parseArray(jsonStr,Student.class);
        for(Student stu : studentList) {
            System.out.println("姓名:"+ stu.getStu_name());
            System.out.println("性别:"+ stu.getStu_sex());
            System.out.println("年龄:"+ stu.getStu_age());
        }
    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1505576.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c++0305习题

一、求下面表达式的值 1&#xff0e;0 2&#xff0e;-1 3&#xff0e;1 4&#xff0e;&#xff08;1&#xff09;1 &#xff08;2&#xff09;3.2 &#xff08;3&#xff09;0 &#xff08;4&#xff09;7.0 5.&#xff08;1&#xff09;0&#xff08;2&#xff09;300.005&a…

【蓝桥·算法双周赛】第七场分级赛——小白入门赛

2.霓虹【算法赛】 - 蓝桥云课 (lanqiao.cn) st数组用来存第i个位置&#xff0c;这个字母有没有编号j #include<bits/stdc.h> const int N1e610; using lllong long; std::map<std::string,std::string> mp;std::string a,aa; int st[N][10];// int stt[N][10];//对…

Tensorflow2.0+部署(tensorflow/serving)过程备忘记录Windows+Linux

Tensorflow2.0部署&#xff08;tensorflow/serving&#xff09;过程备忘记录 部署思路&#xff1a;采用Tensorflow自带的serving进模型部署&#xff0c;采用容器docker 1.首先安装docker 下载地址&#xff08;下载windows版本&#xff09;&#xff1a;https://desktop.docke…

算法设计与分析---递归算法

递归算法 排列问题&#xff1a; 设计递归算法生成n个元素R{r1,r2,r3…rn}的全排列 将排列R个元素拆解为RiR-{ri}个元素的全排列 &#xff08;r)perm(X)表示在全排列perm(X)的每一个排列前加上前缀得到的排列 汉诺塔问题&#xff1a; void hanoi(int n,int a,int b,int c) …

第八个实验:(A+B)-C的结果判断奇偶特性

实验内容:(A+B)-C的结果判断奇偶特性,最后显示结果 实验步骤: 第一步:建立项目 第二步:实验步骤,编写程序 第三步:实验结果

【FindAllMarkers】Seruat鉴定差异表达基因的方法与P值的理解

目录 差异表达分析 用法简单示例 结果解读 P值与P adjust值的区别 假设检验 Bonferroni校验 reference 差异表达分析 seruat中差异表达分析的函数主要有两个&#xff1a;FindAllMarkers()和FindMarkers()&#xff0c;前者是比较一个cluster与所有其他cluster之间的基因…

鸿蒙开发(一)-环境配置

鸿蒙开发(一)-环境配置 本篇文章主要介绍下鸿蒙开发环境的配置。 1&#xff1a;下载DevEco Studio 可以直接访问以下网址下载&#xff1a; https://developer.huawei.com/consumer/cn/deveco-studio#download 当前window的使用版本是&#xff1a;devecostudio-windows-3.1…

Openharmony的设备开发流程 Hi3516DV300

安装VirtualBox 这里用VirtualBox 6.1.3 https://download.virtualbox.org/virtualbox/6.1.30/VirtualBox-6.1.30-148432-Win.exe 安装 安装Ubuntu镜像 Ubuntu系统要求&#xff1a;Ubuntu18.04~21.10版本。推荐使用20.04版本&#xff0c;内存16 GB及以上。 https://mirrors…

错误票据 刷题笔记

开数组 读入数据 记录最小值和最大值 每次读入x; 让a[x]; 从最小值开始 向上扫 当扫到a[x]0时候为断号 扫到a[x]>1为重号&#xff1b; 该题的小技巧 未知长度的数据的读入方式 1.首先在头文件敲上 #include<sstream> #include<string> #include<…

SpringCloudGateway理论与实践

文章目录 网关介绍为什么需要网关Gateway 使用gateway pom依赖yml 配置重启测试总结 断言过滤器工厂路由过滤器的种类请求头过滤器默认过滤器全局过滤器总结 Gateway解决跨域 网关介绍 Spring Cloud Gateway 是一个基于Spring Framework 5&#xff0c;由Spring Cloud团队开发的…

FPGA - 科学设计复位信号(XILINX)

1&#xff0c;同步复位与异步复位 简单来说&#xff1a;复位信号与时钟同步&#xff0c;称之为同步复位。 复位信号与时钟不同步&#xff0c;称之为异步复位。 2、xilinx 的复位策略 ① 同步高复位 ② 计数器和状态机必须复位 ③ 能不使用复位尽量不使用复位&#xff0c;比如中…

一键部署Tesseract-OCR环境C++版本(Windows)

环境&#xff1a;Windows 10 工具&#xff1a;git vcpkg vscode cmake 库&#xff1a;Tesseract 一键部署Tesseract-OCR环境C版本&#xff08;Windows&#xff09; 分享这篇文章的原因很简单&#xff0c;就是为了让后续的朋友少走弯路。自己在搜索相关C版本的tesseract部署时…

C/C++指针详解

接下来我们来介绍一下什么是指针&#xff1f; 指针其实就是元素存放地址&#xff0c;更加形象的比喻&#xff1a;在酒店中如果你想要去注必须去付费不然不能住&#xff0c;在计算机也同样如此&#xff08;但是不需要付费哦&#xff09;每当我们使用一个变量或其他需要申请空间…

Unity ShaderGraph实现地面积水效果

先看看效果 右侧参数&#xff0c;能够控制水高&#xff0c;波纹的速度等&#xff0c;但是这个效果需要修改高度图和凹凸图&#xff0c;毕竟有些模型并不是平面&#xff0c;对于具有斜面的模型就需要修改贴图。 ShaderGraph如下

STM32CubeIDE基础学习-STM32CubeIDE软件程序仿真调试

STM32CubeIDE基础学习-STM32CubeIDE软件程序仿真调试 前言 一般编写完程序后都会进行编译&#xff0c;看结果是否有存在语法错误&#xff0c;确认没有语法错误之后再进行代码的下载观察硬件执行是否和软件编程预期的结果一致&#xff0c;如果发现硬件执行达不到预期现象&#…

PHP 高仿抖音滑动H5随机短视频源码

源码名称&#xff1a;高仿抖音滑动H5随机短视频源码 源码介绍&#xff1a;一款带后台的高仿抖音滑动H5随机短视频源码&#xff0c;带打赏功能。支持之定义视频源&#xff0c;可设置本地读取播放源或站外的API播放源链接。支持点击跳转联系QQ或微信。支持广告弹窗&#xff0c;可…

如何使用固定公网地址SFTP远程传输文件至安卓Termux本地目录?

文章目录 1. 安装openSSH2. 安装cpolar3. 远程SFTP连接配置4. 远程SFTP访问4. 配置固定远程连接地址 SFTP&#xff08;SSH File Transfer Protocol&#xff09;是一种基于SSH&#xff08;Secure Shell&#xff09;安全协议的文件传输协议。与FTP协议相比&#xff0c;SFTP使用了…

主升浪趋势票如何去做,看完这2个例子就可以终结了

我们在这个市场是否能持续赚钱不被淘汰取决于我们自身迭代速度&#xff0c;向市场学习本身就是向市场资金共识方向靠拢&#xff0c;接近客观&#xff0c;远离个人偏见的主观。看清这一点&#xff0c;你才有可能性&#xff0c;否则连可能性都不会有。 在上述问题中&#xff0c;虽…

数字化审计智慧

简析内部审计数字化转型的方法和路径 内部审计是一种独立的、客观的确认和咨询活动&#xff0c;包括鉴证、识别和分析问题以及提供管理建议和解决方案。狭义的数字化转型是指将企业经营管理和业务操作的各种行为、状态和结果用数字的形式来记录和存储&#xff0c;据此再对数据进…

实验三 虚拟内存管理-实验部分

目录 一、知识点 1、虚拟存储 1.1、虚拟存储需求 1.2、虚拟存储的局部现象 1.3、虚拟页式存储管理 1.4、虚拟页式存储管理总流程 2、页面置换算法 2.1、页面置换算法的概念 2.2、常见的局部页面置换算法 3、虚拟存储管理实现分析 3.1、总体流程介绍 3.2、关键数据结…