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

目录

前言

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.mfbz.cn/a/449063.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

上手OpenMMLab——从零开始通过mmagic上手AIGC

上手OpenMMLab——从零开始通过mmagic上手AIGC 目录 上手OpenMMLab——从零开始通过mmagic上手AIGC**写在前面****MMagic简介与特性****环境搭建与初步探索****文本生成与编辑****图像生成与风格迁移****音频生成与语音合成****高级应用与案例分享** **总结****附录&#xff1a…

sqli-labs练习

2关 找出数据库名字 从数据库security 中找到表明名: 找到数据库名字: 从表users中找到列: 取出表users用户名和密码:用户名~密码 3关 判断出id是(‘id’)的形式 4关 双引号测试报错,推测是(“id“) 5关 填写id=1没有回显信息(布尔盲注一般适用于页面没有回显字…

力扣--动态规划97.交错字符串

思路分析&#xff1a; 动态规划数组定义&#xff1a; dp[i][j] 表示&#xff1a;使用字符串 s1 的前 i 个字符和字符串 s2 的前 j 个字符&#xff0c;能否构成字符串 s3 的前 i j 个字符的交错组合。 初始化&#xff1a; dp[0][0] 初始化为 1&#xff0c;表示空串是 s1 和 s2 …

蓝桥杯练习系统(算法训练)ALGO-980 斐波那契串

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;10.0s Java时间限制&#xff1a;30.0s Python时间限制&#xff1a;50.0s 问题描述 斐波那契串由下列规则生成&#xff1a;   F[0] "0";   F[1] "1";   F[n] F[n-1] F[n-2]…

2024年最新《国际预警期刊》正式更新!

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、国际期刊预警名单的变化&#xff1f;二、课程案例展示&#xff08;篇幅有限仅展示部分&#xff09;1.【热图系列】2.【九象限图系列】3.【富集分析系列】4.【机…

Redis哨兵模式(Sentinel)的搭建与配置

创建三个Redis实例所需的目录,生产环境需独立部署在不同主机上,提高稳定性。 Redis 哨兵模式(Sentinel)是一个自动监控处理 redis 间故障节点转移工作的一个redis服务端实例,它不提供数据存储服务,只进行普通 redis 节点监控管理,使用redis哨兵模式可以实现redis服务端故…

压缩自定义格式压缩包<2>:python使用DEFLATE 算法打包并解压成功,但是解压后的文件格式是固定后缀。

打包 import zlib import osdef compress_folder(input_folder, output_filename):"""使用 DEFLATE 算法压缩文件夹下的所有文件。Parameters:input_folder: str要压缩的文件夹路径。output_filename: str输出压缩文件名。"""# 创建一个空的字节…

数据结构绪论

数据元素&#xff1b;数据项&#xff1b;组合项 数据对象 有相同性质的数据元素就属于同一个数据对象&#xff1b; 而数据结构则要求数据元素之间存在特定的关系&#xff01; 线性数据结构&网状数据结构 数据结构这门课关注的是数据元素之间的关系&#xff0c;和对这些…

做抖音小店需要交钱吗?有门槛吗?都有哪些入驻条件和费用?

大家好&#xff0c;我是电商花花。 在抖音上开店已经成为很多人追逐的方向&#xff0c;因为这些人都看到别人在抖音上赚到钱&#xff0c;然后也想在抖音上尝试一下。 然而&#xff0c;许多人心中仍然存着一个问题&#xff0c;就是做抖音小店需要交钱吗&#xff1f;是否存在门…

盛元广通粮油质量检测实验室管理系统

近年来对于食品安全问题层出不穷&#xff0c;为提高粮食检测中心管理水平&#xff0c;关系到千千万万的消费者的健康饮食问题&#xff0c;粮油作为老百姓日常生活饮食必需品、消耗品&#xff0c;需从源头上对粮食在本省&#xff08;区、市、县&#xff09;不同粮食品种检测检测…

WorkPlus Meet提供高效、安全视频会议解决方案

WorkPlus Meet是一款私有部署和定制化的视频会议解决方案&#xff0c;为企业提供高效、安全的远程协作平台。随着全球数字化转型的加速&#xff0c;视频会议已成为企业必不可少的工作工具&#xff0c;而WorkPlus Meet的私有部署和定制化功能&#xff0c;为企业提供了更大的控制…

KIF本地密钥注入验证步骤 RSA加解密 python JAVA

**验证步骤&#xff1a;** # 终端随机生成一对RSA key pair pem文件 # 终端把sn及公钥发过去 # KIF返回公钥加密后的IPEK及明文IPEK的KCV &#xff08;加密机处理加密等操作&#xff1a;把sn和Base Derivation Key分散生成IPEK用加密机的Local Master Key存入加密机&#xff0c…

面试官:说说你对事件循环的理解

一、事件循环是什么 首先&#xff0c;JavaScript是一门单线程的语言&#xff0c;意味着同一时间内只能做一件事&#xff0c;但是这并不意味着单线程就是阻塞&#xff0c;而实现单线程非阻塞的方法就是事件循环 在JavaScript中&#xff0c;所有的任务都可以分为 同步任务&#…

鸿蒙操作系统 HarmonyOS 3.2 API 9 Stage模型通过ArkTS接入高德地图

用鸿蒙ArkTS语言开发地图APP应用时&#xff0c;很多地图厂商只接入了鸿蒙Java&#xff0c;ArkTS版本陆续接入中&#xff0c;等一段时间才能面世&#xff0c;当前使用地图只能通过鸿蒙的Web组件&#xff0c;将HTML页面嵌入到鸿蒙APP中。具体方法如下&#xff1a;编写HTML <!…

STM32寄存器总结

stm32f10x.h AFIO AFIO->MAPR |= (0<<26)|(1<<25)|(0<<24)|(1<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<0); 复用重映射和调试I/O配置寄存器(AFIO_MAPR) 地址偏移:0x04 复位值:0x0000 0000 第24-26位: 设置值:010 说明: …

初学Vue——打包部署Vue前端静态资源

0 引言 我们的前端工程开发好了&#xff0c;但是我们需要发布&#xff0c;那么如何发布呢&#xff1f;主要分为2步&#xff1a; 前端工程打包 通过nginx服务器发布前端工程 在完成Vue项目后&#xff0c;我们需要将项目部署到服务器中&#xff0c;才能够在互联网中访问。这里…

do while循环、嵌套循环、数组简介

本文参考C Primer Plus进行学习 文章目录 出口循环条件&#xff1a;do while如何选择循环嵌套循环数组简介 在for循环中使用数组 一.出口循环条件&#xff1a;do while 出口循环条件&#xff0c;即在循环的每次迭代之后检查测试条件&#xff0c;这保证了至少执行循环体中的内容…

《互联网的世界》第六讲-去中心化和安全

互联网构建于开放互联的中立原则之上&#xff0c;公平接入&#xff0c;数据互联互通&#xff0c;流量被无差别对待&#xff0c;这意味着互联网本质上是匿名&#xff0c;去中心的&#xff0c;这与我们的现实世界完全不同。 但互联网上的主流业务却是 c/s 产销模式&#xff0c;试…

【教程】APP备案全攻略:确保你的应用合规上线

【教程】APP备案全攻略&#xff1a;确保你的应用合规上线 摘要 本文详细介绍了中国大陆地区互联网信息服务提供者&#xff08;AP&#xff09;进行APP备案的流程、要求和注意事项。包括备案对象、备案方式、备案内容、备案流程等方面的详细说明&#xff0c;帮助开发者顺利完成…

sensitive-word 敏感词 违规文字检测

1、快速开始 - JDK1.7- Maven 3.x 2、Maven 引入 <!-- https://mvnrepository.com/artifact/com.github.houbb/sensitive-word --><dependency><groupId>com.github.houbb</groupId><artifactId>sensitive-word</artifactId><version…