Java 中Json中既有对象又有数组的参数 如何转化成对象

1.示例一:解析一个既包含对象又包含数组的JSON字符串,并将其转换为Java对象

在Java中处理JSON数据,尤其是当JSON结构中既包含对象又包含数组时,常用的库有org.jsonGsonJackson。这里我将以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中解析出的nameagehobbies

这个示例展示了如何在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.javaJsonDemo.java,然后使用java命令来运行JsonDemo类。

  • 如果我们使用的是IDE,我们可以直接右键点击JsonDemo.java并选择“Run 'JsonDemo.main()'”来运行程序。

(3)查看结果:运行程序后,我们将在控制台看到Person对象的输出,它包含了从JSON字符串中解析出的nameagehobbies

这个解决方案展示了如何在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数据的理想选择。

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

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

相关文章

k8s kubectl top pod报错error Metrics API not available

文章目录 1、场景2、解决方法1、确认Metrics Server是否已经在集群中安装2、安装metric-server组件2.1、组件地址2.2、组件与K8S集群版本对应关系2.3、apply资源清单文件2.4、验证Metrics Server正常工作 1、场景 在使用kubectl top pod 命令时遇到了error: Metrics API not a…

AHK的对象和类学习心得

;---------------------------------- ; AHK的对象和类学习心得 By FeiYue ;---------------------------------- 一、简单对象的使用&#xff08;细节看帮助&#xff09; AHK-V1&#xff1a; 简单数组 arr:[111, 222] 关联数组 arr:{x:111, y:222, id:“abc”} 这两种可以用…

大语言模型融合知识图谱的问答系统研究

文章目录 题目摘要方法实验消融实验 题目 大语言模型融合知识图谱的问答系统研究 论文地址&#xff1a;http://fcst.ceaj.org/CN/10.3778/j.issn.1673-9418.2308070 项目地址&#xff1a;https://github.com/zhangheyi-1/llmkgqas-tcm/ 摘要 问答系统&#xff08;Question Ans…

C-I-O和多线程

C条件变量 C中的条件变量&#xff08;Condition Variable&#xff09;是一种同步原语&#xff0c;用于在多线程程序中阻塞一个或多个线程&#xff0c;直到收到另一个线程的通知。条件变量通常与互斥锁&#xff08;Mutex&#xff09;一起使用&#xff0c;以确保在访问共享数据时…

【持续更新】vs 编译过程中的问题及其解决方案

独立寒秋&#xff0c;湘江北去&#xff0c;橘子洲头。 目录 问题 1 &#xff1a; 无法查看或者打开 PDB 文件。 问题 2 &#xff1a; 命令提示符中查看运行结果&#xff0c;控制台闪退。 问题 3 &#xff1a; 某功能的判断条件&#xff1a;int val > 1e9&#xff0c;逻辑…

领导高水平,在管人上都会做这3点,让下属忠心耿耿

领导高水平&#xff0c;在管人上都会做这3点&#xff0c;让下属忠心耿耿 第一点&#xff1a;给到有面子 作为一个领导&#xff0c;一定要在另一方面给自己的下属做最大努力的争取&#xff0c;只有把利益给到位&#xff0c;让你的下属有面子&#xff0c;才能够真正的赢得下属的心…

命令行运行git reflog(reference log)报错的解决办法

文章目录 1. 检查 Git 是否已安装2. 检查 PATH 环境变量3. 重新安装 Git 在Git中&#xff0c; reflog的英文全称是 “ reference log”。意思是 引用日志&#xff08;参考日志&#xff09;。它记录了本地仓库中HEAD和分支引用所指向的提交的变更历史。这包括了你所有的提交&…

澳大利亚新闻.科技.汽车.旅行.商业类单发媒体

每日简报Daily Bulletin 澳大利亚西部时间ModernAustralian.com 澳大利亚垂直新闻.科技.汽车.旅行.商业类媒体&#xff0c;ModernAustralian.com是澳大利亚西部地区的一家权威媒体平台&#xff0c;提供全面的新闻报道、科技资讯、汽车信息、旅行指南、商业动态等内容。每日简报…

liunx文件系统,日志分析

文章目录 1.inode与block1.1 inode与block概述1.2 inode的内容1.3 文件存储1.4 inode的大小1.5 inode的特殊作用 2.硬链接与软链接2.1链接文件分类 3.恢复误删除的文件3.1 案例:恢复EXT类型的文件3.2 案例:恢复XFS类型的文件3.2.1 xfsdump使用限制 4.分析日志文件4.1日志文件4.…

element-ui Tree之懒加载叶子节点强制设置父级半选效果

效果&#xff1a; 前言&#xff1a; 我们是先只展示一级的&#xff0c;二级的数据是通过点击之后通过服务器获取数据&#xff0c;并不是全量数据直接一起返回回来的。 问题&#xff1a; 当你设置了默认选中的子节点&#xff0c;但是由于刚进入页面此时tree中数据暂是没有这个…

A*——AcWing 179. 八数码

A* 定义 A* 算法是一种在图形或地图中寻找最短路径的启发式搜索算法。它通过综合考虑起始节点到当前节点的实际代价和当前节点到目标节点的预估代价&#xff0c;来决定下一步的搜索方向。 运用情况 路径规划&#xff1a;如在地图导航中为车辆、行人规划最优路线。游戏开发&…

算法刷题笔记 单调栈(C++实现)

文章目录 题目描述基本思路实现代码 题目描述 给定一个长度为N的整数数列&#xff0c;输出每个数左边第一个比它小的数&#xff0c;如果不存在则输出−1。 输入格式 第一行包含整数N&#xff0c;表示数列长度。第二行包含N个整数&#xff0c;表示整数数列。 输出格式 共一…

学会python——用python制作一个登录和注册窗口(python实例十八)

目录 1.认识Python 2.环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3.登录和注册窗口 3.1 代码构思 3.2 代码实例 3.3 运行结果 4.总结 1.认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读…

Spring Boot项目中使用MockMvc进行测试的详细指南

目录 MockMvc简介安装和配置基本用法高级用法集成测试测试最佳实践总结 MockMvc简介 MockMvc是Spring框架提供的一种用于测试Spring MVC控制器的工具。它允许开发者在不启动完整的Web服务器的情况下&#xff0c;模拟HTTP请求并验证响应。MockMvc的主要优点包括&#xff1a; …

免杀笔记 ---> PE

本来是想先把Shellcode Loader给更新了的&#xff0c;但是涉及到一些PE相关的知识&#xff0c;所以就先把PE给更了&#xff0c;后面再把Shellcode Loader 给补上。 声明&#xff1a;本文章内容来自于B站小甲鱼 1.PE的结构 首先我们要讲一个PE文件&#xff0c;就得知道它的结构…

SPI四种模式--极性与相位

SPI的四种模式&#xff1a;相位和极性 极性 定义时钟空闲状态&#xff1a; CPOL0&#xff1a;时钟线在空闲状态为低电平 CPOL1&#xff1a;时钟线在空闲状态为高电平 这个设置决定了设备不进行通信时时钟线的状态。 兼容性&#xff1a; 不同的SPI设备可能需要不同的时钟极性…

java.lang.classnotfoundexception jakarta.xml.bind.jaxbexception java 17问题

解决 <dependency><groupId>jakarta.xml.bind</groupId><artifactId>jakarta.xml.bind-api</artifactId><version>4.0.2</version> </dependency>参考&#xff1a; Handling NoClassDefFoundError for JAXBException in Jav…

【Linux开发实战指南】基于TCP、进程数据结构与SQL数据库:构建在线云词典系统(含注册、登录、查询、历史记录管理功能及源码分享)

目录 项目演示&#xff1a; 1. 主界面 技术讲解&#xff1a; TCP连接 进程的并发 链表 SQLite3 IO对文件的读写 功能实现 实现逻辑 我遇到的问题&#xff1a; 服务器端代码思路解析 必要条件 步骤详解 客户端代码思路解析 步骤详解 服务器源码如下&#xff1a;…

windows电脑如何运行python的定时任务

这里需要使用&#xff1a;windows系统设置-控制面板里的计划任务 1.打开计划任务之后&#xff0c;选择&#xff1a;创建基本任务 2.填写名称&#xff0c;这里根据自己具体的项目需求填写&#xff0c;然后点击下一步。 3.选择每日&#xff0c;再点击下一步 4.设置时间&…

Python 学习之常用第三方库(五)

Python 常用第三方库 Python 是一门功能强大的编程语言&#xff0c;其生态系统中包含了许多优秀的第三方库&#xff0c;这些库极大地扩展了 Python 的功能。以下是一些常用的 Python 第三方库&#xff1a; 1. NumPy&#xff1a; a. 用于数值计算的库&#xff0c;提供了大量的…