【开发】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\"}]";//转换成JSONArrayJSONArray 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\"}]";//转换成JSONArrayList<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.mzph.cn/news/737707.shtml

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

相关文章

业界主流数据加速技术路线

计算存储分离已经成为云计算的一种发展趋势。在计算存储分离之前&#xff0c;普遍采用的是传统的计算存储相互融合的架构&#xff0c;但是这种架构存在一定的问题&#xff0c;比如在集群扩容的时候会面临计算能力和存储能力相互不匹配的问题。用户在某些情况下只需要扩容计算能…

交流负载箱的特点和优势有哪些?

交流负载箱广泛应用于电力系统、新能源、轨道交通、航空航天等领域。它具有以下特点和优势&#xff1a; 1. 灵活性高&#xff1a;交流负载箱可以根据实际需求&#xff0c;调整输出电流、电压、功率等参数&#xff0c;以满足不同场景下的测试需求。同时&#xff0c;它还可以实现…

App自动化测试之Appium 环境搭建保姆级教程(全网最全)

前言 APP自动化测试运行环境比较复杂&#xff0c;稍微不注意安装就会失败。我见过不少朋友&#xff0c;装了1个星期&#xff0c;Appium 的运行环境还没有搭好的。 搭建环境本身不是一个有难度的工作&#xff0c;但是 Appium 安装过程中确实存在不少隐藏的比较深的坑&#xff…

低代码平台如何选型 盘点国内外主流低代码开发平台

随着数字化转型的加速&#xff0c;低代码开发平台作为一种新型软件开发方式&#xff0c;受到了广泛关注。国内低代码市场也呈现出蓬勃发展的态势&#xff0c;各种低代码平台如雨后春笋般涌现。本文将对国内低代码平台进行盘点&#xff0c;以帮助企业和开发者更好地了解市场情况…

strstr函数、chdir函数、access函数、strdup函数的介绍

1、strstr函数 strstr 是 C 语言中的一个字符串处理函数&#xff0c;用于在一个字符串中查找子字符串的第一次出现。 函数原型 char *strstr(const char *haystack, const char *needle); haystack&#xff1a;要在其中搜索的字符串。needle&#xff1a;要查找的子字符串。 函…

如何正确选择国外服务器的带宽和线路呢?

国外大带宽服务器是一种提供高带宽、高速网络连接和良好稳定性的服务器&#xff0c;但在中国使用这类服务器可能涉及到违反法律法规的风险。因此我无法为你提供相关帮助。接下来和源库一起了解如何正确选择国外服务器的带宽和线路呢? 考虑目标用户的地理位置。如果目标用户主要…

Facebook、亚马逊账号如何养号?

之前我们讨论过很多关于代理器的问题。它们的工作原理是什么?在不同的软件中要使用那些代理服务器?这些代理服务器之间的区别是什么?什么是反检测浏览器等等。 除了这些问题&#xff0c;相信很多人也会关心在使用不同平台的时代理器的选择问题。比如&#xff0c;为什么最好…

错误票据 刷题笔记

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

校园外卖创业中的信息差,了解这些创业不迷路

外卖已经成为大学生日常生活的重要组成部分&#xff0c;但大部分高校对外卖都有着严格的管理&#xff0c;外卖取餐不便、配送时间过长、拿错餐等问题频出&#xff0c;基于此校园外卖创业成了高校市场的热门项目。 本文就校园外卖创业中存在的信息差展开分析&#xff0c;帮你理…

window Zookeeper 启动;

文章目录 前言一、Zookeeper 介绍&#xff1a;二、window 使用&#xff1a;2.1 下载&#xff1a;2.2 启动2.3 连接&#xff1a; 总结 前言 本文对window Zookeeper zk 启动 进行介绍&#xff1b; 一、Zookeeper 介绍&#xff1a; ZooKeeper 是一个开源的分布式协调服务&#…

mac 下redis

安装 Redis brew install redis 安装完成后&#xff0c;我们可以使用以下命令来确认 Redis 是否正确安装&#xff1a; redis-cli ping 启动 Redis redis-server 后台启动 Redis&#xff0c;可以使用以下命令&#xff1a; redis-server --daemonize yes 指定配置文件启动…

MongoDB的count() 统计文档数量非常慢

在MongoDB中&#xff0c;count()函数用于统计文档的数量。但是count()函数通常不会使用索引来计算文档数量&#xff0c;而是扫描集合中的文档来计数。当数据量较大的时候&#xff0c;就不适合使用了。 解决方案&#xff1a; 1、使用聚合框架&#xff08;aggregation framewor…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:QRCode)

用于显示单个二维码的组件。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 二维码组件的像素点数量与内容有关&#xff0c;当组件尺寸过小时&#xff0c;可能出现无法展示内容的情况&#xff0c;…

【Java】关于ZooKeeper的原理以及一致性问题,协议和算法和ZooKeeper的理论知识和应用 场景

1. 目录 目录 1. 目录 2. 什么是ZooKeeper 3. 一致性问题 4. 一致性协议和算法 4.1. 2PC&#xff08;两阶段提交&#xff09; 4.2. 3PC&#xff08;三阶段提交&#xff09; 4.3. Paxos 算法 4.3.1. prepare 阶段 4.3.2. accept 阶段 4.3.3. paxos 算法的死循环…

【大厂AI课学习笔记NO.79】机器学习行业人才能力图谱

有从事机器学习行业的小伙伴&#xff0c;人才岗位如上了。 同样的&#xff0c;也是分为领军人才&#xff08;略&#xff09;、产业研发人才、应用开发人才和实用技能人才了。 机器学习领域的就业岗位分析 随着科技的飞速发展&#xff0c;人工智能已成为当今时代最热门的领域…

【2024泰迪杯】B 题:基于多模态特征融合的图像文本检索Python代码实现

【2024泰迪杯】B 题&#xff1a;基于多模态特征融合的图像文本检索Python代码实现 1 题目 2024 年&#xff08;第 12 届&#xff09;“泰迪杯”数据挖掘挑战赛—B 题&#xff1a;基于多模态特征融合的图像文本检索 一、问题背景 随着近年来智能终端设备和多媒体社交网络平台…

Java项目:47 ssm007亚盛汽车配件销售业绩管理统+jsp(含文档)

作者主页&#xff1a;源码空间codegym 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 亚盛汽车配件销售业绩管理系统根据调研&#xff0c;确定管理员管理客户&#xff0c;供应商&#xff0c;员工。 管理配件和配件的进货以及出售…

【基础计算机网络2】物理层——通信基础

【前言回顾】 【考纲内容】 一、物理层的基本概念 1.1 物理层的主要任务 物理层解决如何在连接各种计算机的传输媒体上传输数据比特流&#xff0c;而不是指具体的传输媒介。物理层的主要任务&#xff1a;确定与传输媒体接口有关的一些特性。 1.2 物理层的一些特性 机械特性…

2024年春招程序员个人简历范本(精选5篇|附模板)

HR浏览一份简历也就25秒左右,如果你连「好简历」都没有,怎么能找到好工作呢? 如果你不懂得如何在简历上展示自己,或者觉得怎么改简历都不出彩,那请你一定仔细读完。 Java开发工程师简历范本> 性别 男 年龄 24 学历 本科 张三 专业 计算机科学与技术 毕业院校 …

解释器模式

解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为型设计模式&#xff0c;它用于定义一种语言的文法&#xff0c;并提供一个解释器来解释该语言中的表达式。这个模式主要用于解决问题领域中存在的特定语言或表达式的解释和执行问题。它将一个问题分解成一系列的…