深入理解JSON及其在Java中的应用

在这里插入图片描述

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉
🍎个人主页:Leo的博客
💞当前专栏:每天一个知识点
✨特色专栏: MySQL学习
🥭本文内容: 深入理解JSON及其在Java中的应用
🖥️个人小站 :个人博客,欢迎大家访问
📚个人知识库: 知识库,欢迎大家访问

1.什么是JSON

在现代的Web开发中,JSON(JavaScript Object Notation)扮演了极其重要的角色。它是一种轻量级的数据交换格式,由于其易于阅读和编写,同时也易于机器解析和生成,因此广泛应用于网络数据交换和配置文件。

JSON: JavaScript Object Notation(JavaScript 对象表示法)

JSON 是存储和交换文本信息的语法,类似 XML。

JSON 比 XML更小、更快,更易解析。

我们来看一下到底什么是JSON数据:

{"message": [{ "name":"Leo" , "address":"江苏省" }, { "name":"Mary" , "address":"湖北省" }, { "name":"Jack" , "address":"浙江省" }]
}
  • 关于 JSON,最重要的是要理解**它是一种数据格式,不是一种编程语言。虽然具有相同的语法形式,但 JSON 并不从属于 JavaScript。**而且,并不是只有 JavaScript 才使用 JSON,毕竟 JSON 只是一种数据格式。很多编程语言都有针对 JSON 的解析器和序列化器。
  • JSON 是一个轻量级的数据格式,可以简化表示复杂数据结构的工作量。JSON 使用 JavaScript 语法的子集表示对象、数组、字符串、数值、布尔值和 null **。
  • 即使 XML 也能表示同样复杂的数据结果,但JSON 没有那么烦琐,而且在 JavaScript 中使用更便利。ECMAScript 5 定义了一个原生的 JSON 对象; JSON对象包含两个方法: 用于解析 JavaScript Object Notation (JSON) 的 parse() 方法,以及将对象/值转换为 JSON字符串的 stringify() 方法。

2.JSON语法

在了解到什么JSON之后,我们再来讲讲JSON的语法。

3.认识JSON分支

3.1 JSON字符串

前我一直有个困惑,分不清普通字符串,json字符串和json对象的区别。经过一番研究终于给弄明白了。比如在Java中。

JSON字符串是将JSON数据格式化为字符串的形式。这在数据传输时非常有用,因为JSON数据需要被序列化成字符串格式进行网络传输。例如,一个表示用户的JSON对象可能会被转换成这样的字符串:

字符串:这个很好解释,指使用“”双引号包括的字符。

"{\"name\": \"Leo\", \"age\": 20, \"isStudent\": false}"

Json字符串:指的是符合Json格式要求的字符串。

3.2 JSON对象

Json对象:指符合Json格式要求的Java对象

{"name":"Leo" , "age":"20","isStudetn":false 
}

3.3 JSON数组

JSON 数组其实就是包含了多个 JSON 对象的一个集合,数组是以 数组括号 [] 括起来的

[{"area": "浙江杭州"name": "李师傅","age": 25
}, {"area": "北京海淀"name": "小李","age": 26
}]

JSON 数组并一定是要相同的 JSON 对象的集合,也可以是不同的对象,不过我在开发过程中并没有这么使用过,感觉挺别扭的。因为如果将多个对象放进一个 JSONArray 中的话,下意识认为是相同类型的集合

下面 👇 这种类型也是正确的 JSON 数组格式

[{"area": "湖北武汉","name": "Leo","age": 20
}, {"address": "湖北宜昌","email": "Jack@qq.com","phone": 198787891
}]

4.JSONObject

JSONObject是一个在Java中表示JSON对象的类,通常是由像org.json, Gson, Jackson或其他处理JSON的库提供。以org.json库为例,JSONObject是一个封装了JSON数据的键值映射的类。这个类允许你创建新的JSON对象、从字符串解析JSON数据以及像操作普通Java对象一样访问或修改JSON对象中的数据。

简单来说**JSONObject** 是根据 JSON 形式在 Java 中存在的对象映射

4.1 功能特点

JSONObject提供了一系列方法以便与JSON数据进行交互。以下是一些常用方法:

  1. 创建JSON对象: 使用 new 来创建一个空的JSONObject,或者通过传递一个JSON字符串来构造一个已填充的JSONObject
  2. 添加键值对: 使用put方法可以添加键值对,如果键已经存在,将替换键对应的值。
  3. 获取数据: 提供了getopt系列方法来获取键对应的值。get方法在键不存在时会抛出异常,而opt方法在找不到键时会返回一个默认值(例如null)或指定的默认值。
  4. 转换为字符串: toString()方法将JSONObject转换成JSON格式的字符串。
  5. 检查键: has方法可以检查JSONObject是否包含特定的键。

4.2 代码示例

下面我们通过使用org.json库中JSONObject类的做一个简单示例

/*** @author : Leo* @version 1.0* @date 2023-11-21 19:38* @description :*/
public class JSONObjectDemo{public static void main(String[] args) {// 创建一个JSONObject实例JSONObject jsonObj = new JSONObject();// 向这个对象添加键值对jsonObj.put("name", "Alice");jsonObj.put("age", 30);jsonObj.put("hasPet", true);// 输出JSON对象的字符串表示System.out.println("JSON Object: " + jsonObj);// 访问JSONObject中的值int age = jsonObj.getInt("age");String name = jsonObj.getString("name");// 输出获取的值System.out.println("Name: " + name);System.out.println("Age: " + age);// 检查是否存在键boolean hasAge = jsonObj.has("age");System.out.println("Has age key? " + hasAge);// 转换JSON对象为JSON字符串String jsonString = jsonObj.toString();System.out.println("JSON String: " + jsonString);}
}

5.JSONArray

JSONArray 是Java中用于表示JSON数组的类,类似于JSONObject,它是用来处理JSON数据中的数组类型。JSON数组是一个有序的元素集合,每个元素可以是任意类型,如字符串、数字、JSON对象、其他数组等。这个类提供了一系列的方法来创建、解析和操作JSON数组。

5.1 特点

  • 有序集合: JSONArray 中的元素按照它们被添加的顺序排列。
  • 多种类型: 数组中可以包含不同类型的元素,包括其他的JSONObjectJSONArray
  • 灵活性: 和JSONObject类似,提供了丰富的方法来操作数组。

5.2 常用方法

  • 添加元素: 使用 put 方法来向数组中添加元素。
  • 提取元素: 可以通过索引来取数组中的元素,使用诸如 getString(index), getJSONObject(index) 等方法。
  • 修改元素: 可以通过传递索引和新值到 put 方法来修改数组中的元素。
  • 数组长度: 使用 length 方法可以获取数组的长度。
  • 遍历数组: 对JSONArray进行遍历,通常使用for循环结合 get 方法访问每个元素。
  • 转换为字符串: toString 方法可以将整个数组转换成JSON格式的字符串。

示例代码

import org.json.JSONArray;
import org.json.JSONObject;public class JSONArrayExample {public static void main(String[] args) {// 创建(构造)一个JSONArray实例JSONArray array = new JSONArray();// 向数组中添加元素array.put("apple");array.put(100);array.put(new JSONObject().put("key", "value"));// 获取数组长度int length = array.length();// 遍历JSONArray并输出每个元素for (int i = 0; i < length; i++) {System.out.println(array.get(i));}// 输出整个JSONArraySystem.out.println(array.toString());}
}

在上面的代码中,我们创建了一个JSONArray对象,并向其中添加了不同类型的元素。我们还遍历了数组并打印了每个元素,最后,我们将整个数组转换成了一个字符串。

5.3 应用场景

JSONArray 通常用于处理那些按顺序存放同类或不同类数据项的场景。在Web开发中,当我们从API接收到一个JSON数组,或者需要发送一个JSON数组时,JSONArray成为一个理想的工具。此外,当从JSON文件中读取数据,或者需要生成JSON格式的数据进行本地存储时,也经常会用到JSONArray

6.FastJson的应用

阿里官方给的定义是, fastjson 是阿里巴巴的开源JSON解析库,它可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON字符串,也可以从 JSON字符串反序列化到 JavaBean。

6.1 FastJson的优点

  • 速度快
    fastjson相对其他JSON库的特点是快,从2011年fastjson发布1.1.x版本之后,其性能从未被其他Java实现的JSON库超越。
  • 使用广泛
    fastjson在阿里巴巴大规模使用,在数万台服务器上部署,fastjson在业界被广泛接受。在2012年被开源中国评选为最受欢迎的国产开源软件之一。
  • 测试完备
    fastjson有非常多的testcase,在1.2.11版本中,testcase超过3321个。每次发布都会进行回归测试,保证质量稳定。
  • 使用简单
    fastjson的 API 十分简洁。
  • 功能完备
    支持泛型,支持流处理超大文本,支持枚举,支持序列化和反序列化扩展。

6.2 在Java中引用FastJson

要在Java项目中使用FastJson,首先需要将其库添加到项目的依赖中。如果你使用Maven来管理项目,可以在pom.xml文件中添加以下依赖:

 <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.24</version>
</dependency>

6.4 示例代码

首先我们需要先准备一个Person对象。

package com.Leo.exer.json;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;/*** @author : Leo* @version 1.0* @date 2023-11-21 19:52* @description :*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {private String name;private int age;
}
将Java对象转换为Json字符串
Person person = new Person("Leo", 20);// 1.将对象转换为json字符串
String jsonStr = JSON.toJSONString(person);
System.out.println("jsonStr = " + jsonStr);

image-20231121195656342

将Json字符串转换为JSONObject对象
//2.将json字符串转换为JSONObject对象
JSONObject jsonObject = JSON.parseObject(jsonStr);
System.out.println("jsonObject = " + jsonObject);

image-20231121200126582

将JSONObject转换为Java对象
Person person2 = JSON.toJavaObject(jsonObject, Person.class);
System.out.println("person2 = " + person2);

image-20231121200440267

7.JSON格式化网站

这里推荐两个笔者比较常用的两个网站

  • 在线校验JSON
  • JSON在线格式解析

🥇8.文末推荐福利

本书精通AI短视频制作

文本生成视频+图片生成视频+视频生成视频+AI短视频应用

高效视频制作技巧

助你快速成长为行业大咖!

image-20231121201718184

🥇关键点

  1. 自学教程:内容安排由浅入深、循序渐进,数十个生成案例助你零基础掌握AI文字生成视频、图片生成视频、视频生成视频
  2. 老师讲解:赠送所有章节的同步视频教程和全书配套素材文件、效果文件,犹如专业老师手把手教学
  3. 技能精通:一本书精通AI短视频生成,掌握未来最流行的短视频高效制作方法
  4. 职业跃升:深入掌握专业知识,快人一步制作更有专业视觉效果的短视频作品

🥇内容简介

文字可以直接生成视频,图片可以直接生成视频,甚至视频也可以直接生成新的视频?这在过去是无法想象的,但是在AIGC时代,这些都可以实现!本书将带领大家开启AI视频创作之旅,和大家一起积极接触AI、应用AI工具,占得市场先机!

本书内含四篇(13章)内容,从四个方面入手教大家进行AI视频创作。第一篇,文本生成视频篇:介绍AI短视频脚本文案的创作方法、在剪映里用AI文案和文章链接生成视频的方法、在腾讯智影里智能创作文本与视频的方法、在一帧秒创里用文案帮写与智能编辑功能生成与编辑视频的方法等内容;第二篇,图片生成视频篇:介绍使用AI生成所需要的图片素材的方法、在剪映手机版里用图片一键生成视频的方法、在必剪手机版里用图片生成视频的方法、在快影手机版里用图片生成音乐MV的方法等内容;第三篇,视频生成视频篇:介绍使用剪映电脑版一键剪出同款视频的方法、使用 Premiere 中的AI功能快速编辑视频的方法,以及借助AI功能剪辑视频素材的方法等内容;第四篇,AI短视频应用篇:介绍使用ChatGPT生成文案的方法、使用AI视频配音功能制作电影解说类短视频的方法,以及使用AI虚拟数字人制作口播类短视频的方法等内容。除了本书内容,随书附赠80多个教学视频、170个素材与效果文件,以及PPT教学课件、每章案例关键词文件等资源,帮助读者扎实地掌握AI短视频生成与应用技能。

🥇作者简介

木白

网名:龙飞、构图君,湖南省作家协会会员,畅销书作者。

5家摄影家协会会员:中国摄影家协会会员、湖南省摄影家协会会员、长沙市摄影家协会会员、中国人像摄影家协会会员、湖南省青年摄影家协会会员。

6个剪映版本实践者:剪映课程讲师、剪映热门模板创作师,用过剪映测试版、手机版、iPad版、Win版、Mac版、网页版。

28万摄影粉丝博主,“手机摄影构图大全”公众号创始人,分享了300多种构图方法。

40万+抖音单个作品阅读量短视频创作者,剪映代表作《一镜看长沙•大河西》。

2021年短视频作品入选CCTV-1、CCTV-3播出的国庆晚会《中国梦•祖国颂》。

🥇购买链接

当当网链接:http://product.dangdang.com/29632771.html

京东的链接:https://item.jd.com/14187176.html

🥇活动规则

🌟关注我的博客:关注我的博客,所有新鲜的博客文章和活动信息都不会错过。
📲添加博主wx:添加Leocisyam,如果添加不了,请私信博主。
💬参与方式:关注公众号程序员Leo或者文末扫码关注,回复抽奖,即可参与抽奖。
🎁公布结果:2023年11月23日晚,我会亲自抽取2️⃣名幸运读者,并在微信私信通知,请大家注意查收哈。

ToLeoJavaer公众号 (微信搜索程序员Leo)

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

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

相关文章

集成电路工厂用什么ERP?哪家的集成电路ERP比较好

集成电路通常对制造工艺、生产设备、品质检验等方面有较高的要求&#xff0c;而随着智能技术和自动化技术的发展成熟&#xff0c;如今集成电路行业逐渐迈入数字化和智能化阶段&#xff0c;而至这个时代背景当中&#xff0c;很多集成电路工厂借助ERP实现信息化转型升级。 时至今…

喜爱拍拍宝宝照片的,一定要制作照片书方便保存

​制作照片书&#xff0c;让美好记忆长久保存。随着数码技术的普及&#xff0c;我们拥有了越来越多的照片&#xff0c;但如何妥善保存这些珍贵的回忆呢&#xff1f;一张张照片随意夹在相册里&#xff0c;时间一长&#xff0c;容易丢失或混乱。而照片书则不同&#xff0c;它把多…

ROS2对比ROS1的一些变化与优势(全新安装ROS2以及编译错误处理)《1》

1、概述 我们在前面介绍的ROS&#xff0c;都是ROS1的版本&#xff0c;近期对机器狗进行学习的时候&#xff0c;发现版本是ROS2了&#xff0c;也发现平时习惯的一些命令都有了变化&#xff0c;改变还是挺大的&#xff0c;不过熟悉之后还是很习惯ROS2的写法。 ROS2不是在ROS1的基…

python数据结构与算法-13_高级排序算法-分治法

分治法 (Divide and Conquer) 很多有用的算法结构上是递归的&#xff0c;为了解决一个特定问题&#xff0c;算法一次或者多次递归调用其自身以解决若干子问题。 这些算法典型地遵循分治法的思想&#xff1a;将原问题分解为几个规模较小但是类似于原问题的子问题&#xff0c;递…

sap系统连接其它系统

本文来自博客园&#xff0c;作者&#xff1a;Lovemywx2&#xff0c;转载请注明原文链接&#xff1a;https://www.cnblogs.com/1187163927ch/p/8669859.html JAVA连接ORACLE数据库 1&#xff0c;首先需要在Oracle安装完成之后新建一个用户 --新建用户 create user chenh iden…

呼叫中心自建好还是云外呼好用?

传统的呼叫中心在科技的发展下已经被不适用了&#xff0c;都开始使用起智能化的呼叫中心&#xff0c;一个是自建式呼叫中心&#xff0c;一个是云外呼系统。那自建式呼叫中心与云外呼系统的区别有哪些呢&#xff1f; 1、企业自建呼叫中心 劣势 系统维护更新难&#xff1a;自建…

Proxifier联动BurpSuite抓取小程序

直接上软件包 Proxifier安装包https://pan.quark.cn/s/7fb9ad6deb7cProxifier配置文件https://pan.quark.cn/s/049c5f21c97e 无话可说直接操作 1、安装Proxifier步骤可以省略..... 2、将下面文件导入到Proxifier中 3、左上角文件-导入配置文件&#xff08;因为我已经导入过…

【CodeTop】TOP 100 刷题 11-20

文章目录 11. 二叉树的层序遍历题目描述代码与解题思路 12. 搜索旋转排序数组题目描述代码与解题思路 13. 买卖股票的最佳时机题目描述代码和解题思路 14. 岛屿数量题目描述代码与解题思路 15. 环形链表题目描述代码与解题思路 16. 有效的括号题目描述代码与解题思路 17. 合并两…

使用 millis() 函数作为延迟的替代方法(电位器控制延迟时间)

接线图&#xff1a; 代码&#xff1a; unsigned long currentMillis 0; unsigned long previousMillis_LED1 0; unsigned long LED1_delay0; unsigned long previousMillis_LED2 0; unsigned long LED2_delay0; #define LED1 3 #define LED2 9 #define P1 A2 …

python写文件

output_file open(E:/XD_transfer/代码/CNN_new/try.csv, w) output_file.write(Sample, \n) for j in range(5):output_file.write(str(j) \n)

2023亚太杯数学建模思路 - 案例:最短时间生产计划安排

文章目录 0 赛题思路1 模型描述2 实例2.1 问题描述2.2 数学模型2.2.1 模型流程2.2.2 符号约定2.2.3 求解模型 2.3 相关代码2.4 模型求解结果 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 最短时…

关于 win11 系统下12代/13代英特尔大小核架构 CPU 的 VMware 优化:输入延迟、卡顿,大小核调度

关于 win11 系统下12代/13代英特尔大小核架构 CPU 的 VMware 优化&#xff1a;输入延迟、卡顿&#xff0c;大小核调度 一、前言二、VMware 的优化2.1 键鼠输入延迟问题的解决2.1.1 搜索内核隔离2.1.2 关闭内存完整性并重启2.1.3 搜索启用或关闭windows功能2.1.4 关闭 hyper-v 和…

【23真题】难!下沙“小清华”难度爆增!

今天分享的是23年“下沙小清华”杭州电子科技大学843的信号与系统试题及解析。 本套试卷难度分析&#xff1a;22年杭电843考研真题&#xff0c;我也发布过&#xff0c;若有需要&#xff0c;戳这里自取&#xff01;平均分为112分&#xff0c;最高分为145分&#xff01;该院校23…

Impala VS Hive

Impala和Hive的关系 Impala是基于Hive的大数据实时分析查询引擎&#xff0c;直接使用Hive的元数据库Metadata,意味着impala元数据都存储在Hive的metastore中。并且impala兼容Hive的sql解析&#xff0c;实现了Hive的SQL语义的子集&#xff0c;功能还在不断的完善中。 与Hive的…

如何用CHAT理解数理化?

问CHAT&#xff1a;扇形面积的概念&#xff0c;简单阐述一下。 CHAT回复&#xff1a; 扇形面积是指扇形这种二维几何图形所覆盖的区域大小。 扇形是一个圆的一部分&#xff0c;是由圆心出发的两条射线&#xff08;半径&#xff09;和这两条射线所夹角决定的圆周上的弧线所围成…

近期为何事故频发,企业安全生产如何保障?

近期&#xff0c;多地陆续发生了一系列企业安全生产事故&#xff0c;给企业和员工带来了严重的生命和财产损失&#xff0c;引发了社会各界对安全生产问题的广泛关注。安全生产是企业发展的重要保障&#xff0c;然而&#xff0c;企业在追求经济效益的过程中&#xff0c;往往忽视…

为虚幻引擎开发者准备的Unity指南

目录 1.前言2.编辑器2.1 Scene 视图&#xff08;视口&#xff09;2.2 Game 视图 (Play in Editor)2.3.Hierarchy 窗口 (World Outliner)2.4 Project 窗口(Content Browser)2.5 Inspector (Details)2.6 Console&#xff08;消息视图/输出日志&#xff09;2.7 Modes 面板在哪里&a…

​​​​​​​3分钟实现EG网关串口连接麦格米特PLC

EG网关串口连接麦格米特PLC 前言&#xff1a;麦格米特PLC广泛应于工业控制领域&#xff0c;是一款性能高、稳定性强的PLC设备。此文档将介绍如何使用EG系列网关通过串口连接麦格米特PLC&#xff0c;并添加到EMCP物联网云平台&#xff0c;实现电脑Web页面、手机APP和微信对麦格米…

【Rxjava详解】(一)观察者模式的拓展

文章目录 RxJava引入扩展的观察者模式RxJava的观察者模式基本实现 RxJava入门示例Action RxJava引入 在介绍RxJava之前先说一下Rx。全称是Reactive Extensions&#xff0c;直译过来就是响应式扩展 Rx基于观察者模式&#xff0c;它是一种编程模型&#xff0c;目标是提供一致的…

怎么判断list是否为null

List<Entity> baseMess new ArrayList<>(); baseMess motiveService.getBaseMessage(machine.get(i),preDate,nowDate); System.out.println("获取Size"baseMess.size()); baseMess.removeIf(Objects::isNull); System.out.println("获取Size"…