当前位置: 首页 > news >正文

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数据的理想选择。

相关文章:

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

1.示例一&#xff1a;解析一个既包含对象又包含数组的JSON字符串&#xff0c;并将其转换为Java对象 在Java中处理JSON数据&#xff0c;尤其是当JSON结构中既包含对象又包含数组时&#xff0c;常用的库有org.json、Gson和Jackson。这里我将以Gson为例来展示如何解析一个既包含对…...

什么是数据挖掘(python)

文章目录 1.什么是数据挖掘2.为什么要做数据挖掘&#xff1f;3数据挖掘有什么用处&#xff1f;3.1分类问题3.2聚类问题3.3回归问题3.4关联问题 4.数据挖掘怎么做?4.1业务理解&#xff08;Business Understanding&#xff09;4.2数据理解&#xff08;Data Understanding&#x…...

【Tomcat】Linux下安装帆软(fineReport)服务器 Tomcat

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

C++ | Leetcode C++题解之第213题打家劫舍II

题目&#xff1a; 题解&#xff1a; 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类型&#xff0c;方法执行后会跳转到默认的页面。默认页面的路径由方法映射路径和视图解析器中的前缀、后缀拼接成&#xff0c;拼接格式为“前缀方法映射路径后缀”。如果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的风机跑合监控系统&#xff0c;提高风机测试的效率和安全性。系统通过自动控制风机的启停、实时监控电流和功率数据&#xff0c;并具有过流保护功能&#xff0c;有效减少了人工操作和安全隐患&#xff0c;提升了工业设备测试的自动化和智能化水平。 项目…...

sql语句练习注意点

1、时间可以进行排序&#xff0c;也可以用聚合函数对时间求最大值max&#xff08;时间&#xff09; 例如下面的例子&#xff1a;取最晚入职的人&#xff0c;那就是将入职时间倒序排序&#xff0c;然后limit 1 表&#xff1a; 场景&#xff1a;查找最晚入职员工的所有信息 se…...

如视“VR+AI”实力闪耀2024世界人工智能大会

7月4日&#xff0c;2024世界人工智能大会暨人工智能全球治理高级别会议&#xff08;以下简称为“WAIC 2024”&#xff09;在上海盛大开幕&#xff0c;本届大会由外交部、国家发展和改革委员会、教育部等部门共同主办&#xff0c;围绕“以共商促共享 以善治促善智”主题&#xf…...

华为云交付模式和技术支持

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

RK3568平台(opencv篇)ubuntu18.04上安装opencv环境

一.什么是 OpenCV-Python OpenCV-Python 是一个 Python 绑定库&#xff0c;旨在解决计算机视觉问题。   Python 是一种由 Guido van Rossum 开发的通用编程语言&#xff0c;它很快就变得非常流行&#xff0c;主要是 因为它的简单性和代码可读性。它使程序员能够用更少的代码行…...

R-CNN:深度学习在目标检测中的革命

R-CNN&#xff1a;深度学习在目标检测中的革命 目标检测是计算机视觉领域的一个核心问题&#xff0c;而R-CNN&#xff08;Regions with Convolutional Neural Networks&#xff09;算法是这一领域的一个重要里程碑。R-CNN及其后续的多种变体&#xff0c;如Fast R-CNN和Faster …...

docker容器技术、k8s的原理和常见命令、用k8s部署应用步骤

容器技术 容器借鉴了集装箱的概念&#xff0c;集装箱解决了什么问题呢&#xff1f;无论形状各异的货物&#xff0c;都可以装入集装箱&#xff0c;集装箱与集装箱之间不会互相影响。由于集装箱是标准化的&#xff0c;就可以把集装箱整齐摆放起来&#xff0c;装在一艘大船把他们…...

ThinkPHP定时任务是怎样实现的?

接到一个需求&#xff1a;定时检查设备信息&#xff0c;2分钟没有心跳的机器&#xff0c;推送消息给相关人员&#xff0c;用thinkphp5框架&#xff0c;利用框架自带的任务功能与crontab配合来完成定时任务。 第一步&#xff1a;分析需求 先写获取设备信息&#xff0c;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

定义一个类库&#xff0c;定义接口 namespace Plugin {public interface IPlugin{void EllisTest();} }定义另外一个类库&#xff0c;引用上面的类库&#xff0c;实现接口 using Plugin;namespace UserCustom {public class Custom : IPlugin{public void EllisTest(){Conso…...

利用coredump获取程序调用通路

一些前置知识 原文链接&#xff1a;https://blog.csdn.net/tenfyguo/article/details/8159176 一、什么是coredump 我们经常听到大家说到程序core掉了&#xff0c;需要定位解决&#xff0c;这里说的大部分是指对应程序由于各种异常或者bug导致在运行过程中异常退出或者中止&a…...

DVWA sql手注学习(巨详细不含sqlmap)

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

代码随想录算法训练营第70天图论9[1]

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

浏览器设计为默认

...

windows USB 设备驱动开发-USB设备描述符

USB的描述符是USB设备向主机报告状态的重要数据结构&#xff0c;在USB通电后&#xff0c;端点(也称为终结点)0始终处于可用状态&#xff0c;这个默认的端点就是用于主机从设备中读取描述符的。 讨论USB通讯&#xff0c;需要从软件和硬件两方面说起&#xff0c;在软件上&#x…...

【踩坑】修复报错Cannot find DGL libdgl_sparse_pytorch_2.2.0.so

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 目录 错误复现 原因分析 解决方法 错误复现 import dgldataset dgl.data.CoraGraphDataset() graph dataset[0] graph.adjacency_matrix() 原因分…...

postman中参数和x-www-form-urlencoded传值的区别

在 Postman 中&#xff0c;传递参数的方式有多种&#xff0c;其中常用的包括 params 和 x-www-form-urlencoded。这两种方式在使用场景和传递数据的方式上有所不同。 1. Params Params 选项用于在 URL 中传递查询参数。这些参数通常用于 GET 请求&#xff0c;但也可以与其他 …...

自己训练 PaddleOCR

打标工具 https://github.com/Evezerest/PPOCRLabel 感谢这位热心网友提供的标注工具&#xff0c;操作非常的方便 只是这个工具有个小坑get_rotate_crop_image&#xff08;&#xff09; 我的标注数据导出时&#xff0c;很多数据变成倒的 hmmmm, 你管我~ if dst_img_height …...

基于SpringBoot的地方废物回收机构管理系统

本系统主要包括管理员和员工两个角色组成&#xff1b;主要包括&#xff1a;首页、个人中心、员工管理、员工请假管理、销假申请管理、工作日志管理、员工工资管理、员工任务管理、任务汇报管理、设备信息管理、设备借用管理、设备归还管理、设备保修管理、维修入库管理、员工打…...

跑腿平台小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;基础数据管理&#xff0c;管理员管理&#xff0c;接单详情管理&#xff0c;跑腿员管理&#xff0c;跑腿任务管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;跑腿任务&#xff0c;接单员&…...

Java技术栈总结:Redis篇

一、数据类型 Redis 自身是一个 Map&#xff0c;其中的所有数据均采用“key:value”的形式存储。 数据类型指的是存储的数据的类型&#xff0c;即 value 部分的类型&#xff0c;key 的部分只能是字符串。 value 部分的数据类型&#xff1a;<String、List、Hash、Set、Zse…...

django models对应的mysql类型

Django模型字段类型与MySQL数据库类型的对应关系如下&#xff1a; Django 模型字段类型MySQL 数据库类型AutoFieldBIGINT UNSIGNEDCharFieldVARCHARIntegerFieldINTDecimalFieldDECIMALDateFieldDATEDateTimeFieldDATETIMEFileField, ImageFieldVARCHAR (用于文件路径)Boolean…...

2024攻防演练:亚信安全新一代WAF,关键时刻守护先锋

实网攻防 网络安全如同一面坚固的盾牌&#xff0c;保护着我们的信息资产免受无孔不入的威胁。而其中&#xff0c;WAF就像网络安全的守门员&#xff0c;关键时刻挺身而出&#xff0c;为您的企业筑起一道坚实的防线。 攻防不对等 防守方实时应答压力山大 在攻防对抗中&#xf…...