Java 中Json中既有对象又有数组的参数 如何转化成对象
1.示例一:解析一个既包含对象又包含数组的JSON字符串,并将其转换为Java对象
在Java中处理JSON数据,尤其是当JSON结构中既包含对象又包含数组时,常用的库有org.json
、Gson
和Jackson
。这里我将以Gson
为例来展示如何解析一个既包含对象又包含数组的JSON字符串,并将其转换为Java对象。
首先,确保我们的项目中已经加入了Gson库的依赖。如果我们使用的是Maven,可以在pom.xml
中添加如下依赖:
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.9</version> <!-- 请检查是否有更新版本 -->
</dependency>
接下来,我们定义一些Java类来映射JSON数据。假设我们有如下的JSON结构:
{ "name": "Example", "age": 30, "hobbies": [ "Reading", "Traveling", "Coding" ]
}
我们需要定义一个类Person
来表示这个JSON对象:
public class Person { private String name; private int age; private List<String> hobbies; // 构造方法、getter和setter省略,为了简洁 public Person() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public List<String> getHobbies() { return hobbies; } public void setHobbies(List<String> hobbies) { this.hobbies = hobbies; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + ", hobbies=" + hobbies + '}'; }
}
最后,我们使用Gson库来解析JSON字符串并转换为Person
对象:
import com.google.gson.Gson; public class JsonDemo { public static void main(String[] args) { String json = "{\"name\":\"Example\",\"age\":30,\"hobbies\":[\"Reading\",\"Traveling\",\"Coding\"]}"; Gson gson = new Gson(); Person person = gson.fromJson(json, Person.class); System.out.println(person); }
}
以上代码中,Gson
类被用于解析JSON字符串并将其转换成Person
类的实例。fromJson
方法接受两个参数:JSON字符串和要转换成的目标类的Class
对象。执行上述代码,我们将看到控制台输出了Person
对象的字符串表示,其中包括了从JSON中解析出的name
、age
和hobbies
。
这个示例展示了如何在Java中使用Gson库处理包含对象和数组的复杂JSON结构,并将其转换为Java对象。在实际应用中,我们可以根据JSON结构定义相应的Java类,并使用Gson库来轻松地实现JSON与Java对象之间的转换。
2.示例二:使用Gson
库来解析一个包含对象和数组的JSON字符串
当然,我可以提供一个更详细的解决方案,包括完整的类定义、主类中的逻辑处理,以及如何运行整个程序。这里我们仍然使用Gson
库来解析一个包含对象和数组的JSON字符串。
首先,确保我们的项目中已经添加了Gson库的依赖(如之前的Maven依赖示例所示)。
然后,我们定义Person
类,这个类将映射JSON中的对象部分。对于数组部分,我们直接使用Java的List<String>
来接收。
2.1 Person.java
import java.util.List; public class Person { private String name; private int age; private List<String> hobbies; // 构造方法(可选) public Person() { } // Getter 和 Setter public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public List<String> getHobbies() { return hobbies; } public void setHobbies(List<String> hobbies) { this.hobbies = hobbies; } // toString 方法,用于打印Person对象的信息 @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + ", hobbies=" + hobbies + '}'; }
}
2.2 JsonDemo.java
接下来是主类,我们将在这个类中创建JSON字符串,并使用Gson库将其解析为Person
对象。
import com.google.gson.Gson; public class JsonDemo { public static void main(String[] args) { // JSON 字符串 String json = "{\"name\":\"John Doe\",\"age\":30,\"hobbies\":[\"Reading\",\"Traveling\",\"Coding\"]}"; // 创建 Gson 实例 Gson gson = new Gson(); // 使用 Gson 的 fromJson 方法将 JSON 字符串解析为 Person 对象 Person person = gson.fromJson(json, Person.class); // 打印 Person 对象 System.out.println(person); }
}
2.3 如何运行程序
(1)确保Gson库已添加到我们的项目中:如果我们使用的是IDE(如IntelliJ IDEA、Eclipse等),我们可以通过Maven或Gradle来添加依赖,或者将Gson的jar文件直接添加到我们的项目库中。
(2)编译和运行:
-
如果我们使用的是命令行,可以使用
javac
命令来编译Person.java
和JsonDemo.java
,然后使用java
命令来运行JsonDemo
类。 -
如果我们使用的是IDE,我们可以直接右键点击
JsonDemo.java
并选择“Run 'JsonDemo.main()'”来运行程序。
(3)查看结果:运行程序后,我们将在控制台看到Person
对象的输出,它包含了从JSON字符串中解析出的name
、age
和hobbies
。
这个解决方案展示了如何在Java中使用Gson库来处理包含对象和数组的JSON数据,并将其转换为Java对象。我们可以根据自己的需求修改Person
类和JSON字符串。
3. Gson库简介
Gson库是一个广泛使用的Java序列化/反序列化库,它能够将Java对象转换成JSON格式的字符串,也能将JSON字符串解析成Java对象。以下是关于Gson库的详细信息:
3.1概述
(1)定义与用途
-
Gson库是Google开发的一个Java库,用于在Java对象和JSON表示之间进行转换。
-
它允许开发者轻松地将Java对象序列化为JSON字符串,以及将JSON字符串反序列化为Java对象。
(2)官方描述
-
Gson官方描述其为“A Java serialization/deserialization library to convert Java Objects into JSON and back”。
3.2功能与特点
(1)易于使用
-
Gson提供了简单直观的方法来转换Java对象和JSON,如
toJson()
和fromJson()
。 -
它支持任意复杂的Java对象,包括预先存在的、没有源代码的对象。
(2)自定义序列化与反序列化
-
Gson允许开发者为特定类型的对象定义自定义的序列化器和反序列化器。
-
这使得开发者能够控制对象到JSON的映射方式,以及从JSON到对象的解析方式。
(3)性能与可扩展性
-
Gson在性能上表现良好,能够处理大量的数据。
-
它支持序列化/反序列化大型集合和复杂对象结构。
(4)内置类型支持
-
Gson内置了对Java基本类型、集合类型、泛型等的支持。
-
它能够自动处理这些类型的序列化与反序列化。
(5)字段排除与版本控制
-
Gson支持在序列化时排除特定的字段。
-
它还提供了版本控制功能,允许开发者在JSON结构中添加版本信息。
3.3 使用场景
-
Gson库广泛用于Web开发、移动应用开发等领域,特别是在需要处理JSON数据的场景中。
-
它可以与Android开发结合使用,是Android开发中处理JSON数据的常用库之一。
3.4 如何使用Gson
(1) 引入Gson库
-
可以通过Maven、Gradle等构建工具将Gson库添加到项目中。
-
也可以下载Gson的jar包并手动添加到项目的类路径中。
(2)序列化Java对象到JSON
-
使用Gson对象的
toJson()
方法,将Java对象作为参数传入,即可得到对应的JSON字符串。
(3)反序列化JSON到Java对象
-
使用Gson对象的
fromJson()
方法,传入JSON字符串和要转换成的Java对象的类型(类名.class),即可得到对应的Java对象。
3.5 示例代码
以下是一个简单的示例,展示了如何使用Gson库将Java对象序列化为JSON字符串,并将JSON字符串反序列化为Java对象:
import com.google.gson.Gson; public class GsonExample { public static void main(String[] args) { // 创建一个Person对象 Person person = new Person("John Doe", 30); // 创建Gson对象 Gson gson = new Gson(); // 将Person对象序列化为JSON字符串 String json = gson.toJson(person); System.out.println(json); // 输出: {"name":"John Doe","age":30} // 将JSON字符串反序列化为Person对象 Person personFromJson = gson.fromJson(json, Person.class); System.out.println(personFromJson.getName()); // 输出: John Doe System.out.println(personFromJson.getAge()); // 输出: 30 } // 假设的Person类 static class Person { private String name; private int age; // 构造方法、getter和setter省略 }
}
3.6 总结
Gson库是一个功能强大、易于使用的Java序列化/反序列化库,它提供了丰富的API来支持Java对象和JSON之间的转换。无论是在Web开发还是移动应用开发领域,Gson都是处理JSON数据的理想选择。
相关文章:
Java 中Json中既有对象又有数组的参数 如何转化成对象
1.示例一:解析一个既包含对象又包含数组的JSON字符串,并将其转换为Java对象 在Java中处理JSON数据,尤其是当JSON结构中既包含对象又包含数组时,常用的库有org.json、Gson和Jackson。这里我将以Gson为例来展示如何解析一个既包含对…...
什么是数据挖掘(python)
文章目录 1.什么是数据挖掘2.为什么要做数据挖掘?3数据挖掘有什么用处?3.1分类问题3.2聚类问题3.3回归问题3.4关联问题 4.数据挖掘怎么做?4.1业务理解(Business Understanding)4.2数据理解(Data Understanding&#x…...

【Tomcat】Linux下安装帆软(fineReport)服务器 Tomcat
需求:帆软(fineReport)数据集上传至服务器 工具:XSHELL XFTP 帮助文档 一. 安装帆软服务器Tomcat 提供 Linux X86 和 Linux ARM 两种类型的部署包 ,所以在下载部署钱需要确认系统架构不支持在 32 位操作系统上安装 查…...

C++ | Leetcode C++题解之第213题打家劫舍II
题目: 题解: class Solution { public:int robRange(vector<int>& nums, int start, int end) {int first nums[start], second max(nums[start], nums[start 1]);for (int i start 2; i < end; i) {int temp second;second max(fi…...
windows系统中快速删除node_modules文件
npx命令方式 npx rimraf node_modules 项目中设置 "scripts": {# 安装依赖"i": "pnpm install",# 检测可更新依赖"npm:check": "npx npm-check-updates",# 删除 node_modules"clean": "npx rimraf node_m…...
Spring MVC数据绑定和响应——页面跳转(一)返回值为void类型的页面跳转
一、返回值为void类型的页面跳转到默认页面 当Spring MVC方法的返回值为void类型,方法执行后会跳转到默认的页面。默认页面的路径由方法映射路径和视图解析器中的前缀、后缀拼接成,拼接格式为“前缀方法映射路径后缀”。如果Spring MVC的配置文件中没有配…...

CSS动画keyframes简单样例
一、代码部分 1.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><link rel"stylesheet" href…...

LabVIEW风机跑合监控系统
开发了一种基于LabVIEW的风机跑合监控系统,提高风机测试的效率和安全性。系统通过自动控制风机的启停、实时监控电流和功率数据,并具有过流保护功能,有效减少了人工操作和安全隐患,提升了工业设备测试的自动化和智能化水平。 项目…...

sql语句练习注意点
1、时间可以进行排序,也可以用聚合函数对时间求最大值max(时间) 例如下面的例子:取最晚入职的人,那就是将入职时间倒序排序,然后limit 1 表: 场景:查找最晚入职员工的所有信息 se…...

如视“VR+AI”实力闪耀2024世界人工智能大会
7月4日,2024世界人工智能大会暨人工智能全球治理高级别会议(以下简称为“WAIC 2024”)在上海盛大开幕,本届大会由外交部、国家发展和改革委员会、教育部等部门共同主办,围绕“以共商促共享 以善治促善智”主题…...

华为云交付模式和技术支持
华为云交付模式概览 用户由于自身或者企业属性的原因,对于使用云服务的要求也会有所不同。因此,华为云针对于不同用户的不同要求,提供了以下三种交付模式供用户选择。 公有云模式 公有云的核心属性是共享资源服务华为公有云为个人和企业用户…...

RK3568平台(opencv篇)ubuntu18.04上安装opencv环境
一.什么是 OpenCV-Python OpenCV-Python 是一个 Python 绑定库,旨在解决计算机视觉问题。 Python 是一种由 Guido van Rossum 开发的通用编程语言,它很快就变得非常流行,主要是 因为它的简单性和代码可读性。它使程序员能够用更少的代码行…...
R-CNN:深度学习在目标检测中的革命
R-CNN:深度学习在目标检测中的革命 目标检测是计算机视觉领域的一个核心问题,而R-CNN(Regions with Convolutional Neural Networks)算法是这一领域的一个重要里程碑。R-CNN及其后续的多种变体,如Fast R-CNN和Faster …...

docker容器技术、k8s的原理和常见命令、用k8s部署应用步骤
容器技术 容器借鉴了集装箱的概念,集装箱解决了什么问题呢?无论形状各异的货物,都可以装入集装箱,集装箱与集装箱之间不会互相影响。由于集装箱是标准化的,就可以把集装箱整齐摆放起来,装在一艘大船把他们…...

ThinkPHP定时任务是怎样实现的?
接到一个需求:定时检查设备信息,2分钟没有心跳的机器,推送消息给相关人员,用thinkphp5框架,利用框架自带的任务功能与crontab配合来完成定时任务。 第一步:分析需求 先写获取设备信息,2分钟之…...
[C++][CMake][生成可执行文件][上]详细讲解
目录 0.准备工作1.添加CMakeLists.txt文件2.执行cmake命令3.变量定义4.指定使用的C标准5.指定输出路径 0.准备工作 add.c#include <stdio.h> #include "head.h"int add(int a, int b) {return ab; }sub.c#include <stdio.h> #include "head.h"…...
Asp.net Core 反射加载dll
定义一个类库,定义接口 namespace Plugin {public interface IPlugin{void EllisTest();} }定义另外一个类库,引用上面的类库,实现接口 using Plugin;namespace UserCustom {public class Custom : IPlugin{public void EllisTest(){Conso…...
利用coredump获取程序调用通路
一些前置知识 原文链接:https://blog.csdn.net/tenfyguo/article/details/8159176 一、什么是coredump 我们经常听到大家说到程序core掉了,需要定位解决,这里说的大部分是指对应程序由于各种异常或者bug导致在运行过程中异常退出或者中止&a…...

DVWA sql手注学习(巨详细不含sqlmap)
这篇文章主要记录学习sql注入的过程中遇到的问题已经一点学习感悟,过程图片会比较多,比较基础和详细,不存在看不懂哪一步的过程 文章目录 靶场介绍SQL注入 lowSQL注入 MediumSQL注入 HighSQL注入 Impossible 靶场介绍 DVWA(Damn…...

代码随想录算法训练营第70天图论9[1]
代码随想录算法训练营第70天:图论9 拓扑排序精讲 卡码网:117. 软件构建(opens new window) 题目描述: 某个大型软件项目的构建系统拥有 N 个文件,文件编号从 0 到 N - 1,在这些文件中,某些文件依赖于其他文件的…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...

C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...