从零开始掌握Java的JSON转换!全面指南+实例讲解

全文目录:

    • 开篇语
    • 目录 📚
    • 前言 🌟
    • JSON 是什么?为何在 Java 中如此重要
    • Java 中常用的 JSON 转换工具 🛠️
      • 1. Gson
      • 2. Jackson
    • Gson 和 Jackson 的实例解析
      • 🌱 使用 Gson 进行 JSON 转换
        • 1. 对象转 JSON
        • 2. JSON 转对象
      • 🌱 使用 Jackson 进行 JSON 转换
        • 1. JSON 转对象
    • 如何选择适合的 JSON 转换工具 🤔
    • 高级应用:复杂对象的 JSON 转换
      • 1. Gson 处理嵌套对象
      • 2. Jackson 处理复杂结构
    • 小结与个人体会
    • 文末

开篇语

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

目录 📚

  1. 前言 🌟
  2. JSON 是什么?为何在 Java 中如此重要
  3. Java 中常用的 JSON 转换工具 🛠️
  4. Gson 和 Jackson 的实例解析
    • 🌱 使用 Gson 进行 JSON 转换
    • 🌱 使用 Jackson 进行 JSON 转换
  5. 如何选择适合的 JSON 转换工具 🤔
  6. 高级应用:复杂对象的 JSON 转换
  7. 小结与个人体会

前言 🌟

  在现代软件开发中,JSON 格式可以说是“大红大紫”,成了数据交换的“网红”格式之一。不管是前后端数据传输,还是微服务之间的交流,JSON 都是必不可少的。话虽如此,很多 Java 开发者仍然对 JSON 的转换摸不着头脑,尤其是遇到复杂对象时,不知从哪下手。

  今天我将带大家深入了解 Java 中 JSON 的转换技术,分享几个超实用的 JSON 工具包,还会通过实例代码来演示如何在 Java 项目中玩转 JSON。相信看完后,你会对 JSON 转换的各种工具包了然于胸,也能根据项目需求灵活选择合适的工具。那就一起来解锁这项技能吧!😊


JSON 是什么?为何在 Java 中如此重要

  JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它的结构简单清晰,符合人类可读性,几乎可以完美地描述对象结构。关键是,它比 XML 更简洁,更易于解析。随着前后端分离开发的大热,JSON 成了前后端、服务与服务之间数据传输的首选。

  在 Java 开发中,我们常需要将对象转换为 JSON 字符串,以便传输或存储;也经常需要将 JSON 数据解析成 Java 对象,以方便后续业务逻辑的处理。这种对象与 JSON 之间的转换过程就是“JSON 转换”。那么,如何在 Java 中进行 JSON 转换呢?接下来,我们将介绍几款常用的 JSON 转换工具,看看它们如何实现这项任务!💪


Java 中常用的 JSON 转换工具 🛠️

  Java 中最受欢迎的 JSON 转换工具当属 Gson 和 Jackson。两者在业界应用广泛、功能强大,并且可以轻松处理 JSON 与 Java 对象之间的转换。让我们来快速了解一下它们各自的特点。

1. Gson

  Gson 是由 Google 提供的 JSON 库,它使用简单、轻量、功能强大。Gson 支持多种类型的 JSON 转换,兼容性好,适合简单和中等复杂度的 JSON 数据处理。此外,Gson 还支持对象嵌套、集合处理、自定义转换等高级功能。

2. Jackson

  Jackson 是一个更为“重量级”的 JSON 处理库。它不仅支持 JSON 格式,还能处理 XML、YAML 等格式,几乎是数据解析领域的“全能选手”。Jackson 的性能卓越,适合处理大规模、复杂数据,同时提供了更丰富的配置和注解选项,使得它在企业级项目中表现非常亮眼。


Gson 和 Jackson 的实例解析

  接下来,我们以实例为主,深入探讨如何使用 Gson 和 Jackson 进行 JSON 转换,让你通过代码更好地理解两者的使用方式。

🌱 使用 Gson 进行 JSON 转换

  让我们先来看看 Gson。假设有一个简单的 User 类,它包含用户的基本信息,如 idnameemail

public class User {
    private int id;
    private String name;
    private String email;

    // 构造器、getters 和 setters
}
1. 对象转 JSON

  要将 User 对象转成 JSON 字符串,我们只需调用 Gson 的 toJson 方法:

import com.google.gson.Gson;

public class GsonExample {
    public static void main(String[] args) {
        User user = new User(1, "Alice", "alice@example.com");
        Gson gson = new Gson();
        
        String json = gson.toJson(user);
        System.out.println("JSON String: " + json);
    }
}

输出:

{"id":1,"name":"Alice","email":"alice@example.com"}

  是不是很简单?Gson 自动将对象属性转成 JSON 格式,省去了很多手动编码的麻烦。

2. JSON 转对象

  如果我们有一个 JSON 字符串,需要将其解析为 User 对象,那么可以使用 fromJson 方法:

String jsonString = "{\"id\":1,\"name\":\"Alice\",\"email\":\"alice@example.com\"}";
User user = gson.fromJson(jsonString, User.class);
System.out.println("User Name: " + user.getName());

  Gson 会根据 JSON 字段名自动匹配对象的属性,直接返回一个填充了数据的 User 对象。

🌱 使用 Jackson 进行 JSON 转换

  接下来看看 Jackson 的用法。Jackson 的语法和 Gson 略有不同,不过同样非常简洁。

import com.fasterxml.jackson.databind.ObjectMapper;

public class JacksonExample {
    public static void main(String[] args) throws Exception {
        User user = new User(2, "Bob", "bob@example.com");
        ObjectMapper mapper = new ObjectMapper();

        // 对象转 JSON 字符串
        String json = mapper.writeValueAsString(user);
        System.out.println("JSON String: " + json);
    }
}
1. JSON 转对象

  类似于 Gson 的 fromJson,Jackson 使用 readValue 方法来将 JSON 字符串转换为对象:

String jsonString = "{\"id\":2,\"name\":\"Bob\",\"email\":\"bob@example.com\"}";
User user = mapper.readValue(jsonString, User.class);
System.out.println("User Email: " + user.getEmail());

  两者的功能看似差不多,但 Jackson 提供了更强大的对象映射功能,支持注解、自定义序列化等功能,非常适合复杂业务需求。


如何选择适合的 JSON 转换工具 🤔

  到这里你可能会问:“Gson 和 Jackson 都能实现 JSON 转换,应该用哪个?”两者的使用确实有相似之处,但它们各有所长:

  • Gson:适合小型项目和简单 JSON 解析需求,配置简单,语法简洁。
  • Jackson:在大型项目中表现出色,支持多种数据格式、深度解析、高级注解,尤其适合复杂数据和自定义需求的项目。

  如果你的项目对性能要求较高、数据结构复杂或者需要支持 JSON 以外的格式,建议使用 Jackson;而对更轻量、标准的 JSON 转换需求,用 Gson 就足够了。


高级应用:复杂对象的 JSON 转换

  在实际开发中,我们经常遇到嵌套对象或集合对象,这些复杂的数据结构如何转换成 JSON 呢?我们来看两个高级场景,展示 Gson 和 Jackson 的优势。

1. Gson 处理嵌套对象

  假设我们有一个 Order 类,其中包含用户和商品信息。这种嵌套结构对 Gson 来说是小菜一碟:

public class Order {
    private int orderId;
    private User user;
    private List<Product> productList;
    
    // 构造器、getters 和 setters
}

  Gson 自动支持嵌套结构的转换,你只需调用 toJsonfromJson 方法:

Order order = new Order(1001, user, Arrays.asList(product1, product2));
String orderJson = gson.toJson(order);
System.out.println(orderJson);

2. Jackson 处理复杂结构

&emsp

; Jackson 允许通过注解进行自定义转换。比如,我们可以在 User 类中标注某些字段在 JSON 转换中忽略:

@JsonIgnoreProperties({"password"})
public class User {
    private int id;
    private String name;
    private String password;
    // 构造器、getters 和 setters
}

小结与个人体会

  希望这篇文章帮助大家更深入地了解 Java 的 JSON 转换工具,不论是 Gson 的轻量便捷,还是 Jackson 的强大多功能,都各有千秋。在选择工具时,根据项目需求、数据复杂度和性能要求,选对工具才能事半功倍!Happy Coding!🎉

… …

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

… …

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!


⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

北京大学c++程序设计听课笔记101

基本概念 程序运行期间&#xff0c;每个函数都会占用一段连续的内存空间。而函数名就是该函数所占内存区域的起始地址&#xff08;也称“入口地址”&#xff09;。我们可以将函数的入口地址赋给一个指针变量&#xff0c;使该指针变量指向该函数。然后通过指针变量就可以调用这个…

C++:boost库安装

官网&#xff1a;https://www.boost.org/ Boost 库在 C 社区中广受欢迎&#xff0c;主要因为它提供了丰富、强大且稳定的功能&#xff0c;可以显著提高开发效率和代码质量。下面是使用 Boost 库的主要优势和特点&#xff1a; 1. 丰富的功能集合 Boost 提供了数十个高质量的 …

VScode学习前端-01

小问题合集&#xff1a; vscode按&#xff01;有时候没反应&#xff0c;有时候出来&#xff0c;是因为------>必须在英文状态下输入&#xff01; 把鼠标放在函数、变量等上面&#xff0c;会自动弹出提示&#xff0c;但挡住视线&#xff0c;有点不习惯。 打开file->pre…

机房动环境监控用各种列表已经淘汰了,现在都是可视化图表展示了

在信息技术飞速发展的今天&#xff0c;机房作为数据存储、处理和传输的核心场所&#xff0c;其稳定运行至关重要。过去&#xff0c;机房动环境监控主要依赖各种列表形式来呈现数据&#xff0c;但如今&#xff0c;这种方式已经逐渐被淘汰&#xff0c;取而代之的是更加直观、高效…

Pytest-Bdd-Playwright 系列教程(10):配置功能文件路径 优化场景定义

Pytest-Bdd-Playwright 系列教程&#xff08;10&#xff09;&#xff1a;配置功能文件路径 & 优化场景定义 前言一、功能文件路径的配置1.1 全局设置功能文件路径1.2. 在场景中覆盖路径 二、避免重复输入功能文件名2.1 使用方法2.2 functools.partial 的背景 三、应用场景总…

【软件测试】自动化常用函数

文章目录 元素的定位cssSelectorxpath查找元素 操作测试对象点击/提交对象——click()模拟按键输入——sendKeys(“”)清除文本内容——clear()获取文本信息——getText()获取页面标题和 URL 窗口设置窗口大小切换窗口关闭窗口 等待强制等待隐式等待显式等待 浏览器导航 元素的…

CC4学习记录

&#x1f338; CC4 CC4要求的commons-collections的版本是4.0的大版本。 其实后半条链是和cc3一样的&#xff0c;但是前面由于commons-collections进行了大的升级&#xff0c;所以出现了新的前半段链子。 配置文件&#xff1a; <dependency><groupId>org.apach…

【linux】网络基础 ---- 数据链路层

用于两个设备(同一种数据链路节点)之间进行传递 数据链路层解决的问题是&#xff1a;直接相连的主机之间&#xff0c;进行数据交付 1. 认识以太网 "以太网" 不是一种具体的网络, 而是一种技术标准&#xff1a; 既包含了数据链路层的内容, 也包含了一些物理层的内容…

5. ARM_指令集

概述 分类 汇编中的符号&#xff1a; 指令&#xff1a;能够编译生成一条32位机器码&#xff0c;并且能被处理器识别和执行伪指令&#xff1a;本身不是指令&#xff0c;编译器可以将其替换成若干条指令伪操作&#xff1a;不会生成指令&#xff0c;只是在编译阶段告诉编译器怎…

小程序租赁系统开发为企业提供高效便捷的租赁服务解决方案

内容概要 在这个数字化飞速发展的时代&#xff0c;小程序租赁系统应运而生&#xff0c;成为企业管理租赁业务的一种新选择。随着移动互联网的普及&#xff0c;越来越多的企业开始关注如何利用小程序来提高租赁服务的效率和便捷性。小程序不仅可以为用户提供一个快速、易用的平…

计算机组成原理——高速缓存

标记表示——主存块号和缓存块之前的一一对应关系

赛元免费开发板申请

在作者网上冲浪的时候&#xff0c;突然发现了一个国内的良心企业&#xff0c;虽然现在不是很有名&#xff0c;但是他现在是有一个样品申请的活动&#xff0c;他就是国内的Redfine新定义&#xff0c;他申请的板子是用的赛元MCU&#xff0c;作者本着有板子就要申请的原则&#xf…

Ubuntu 的 ROS 操作系统 turtlebot3 SLAM仿真

引言 SLAM&#xff08;同步定位与地图构建&#xff09;在Gazebo仿真环境中的应用能够模拟真实机器人进行环境建图和导航。通过SLAM仿真&#xff0c;开发者可以在虚拟环境中测试算法&#xff0c;而不必依赖真实硬件&#xff0c;便于调试与优化。 Gazebo提供了多个虚拟环境&…

【解决】Layout 下创建槽位后,执行 Image 同步槽位位置后表现错误的问题。

开发平台&#xff1a;Unity 6.0 编程语言&#xff1a;CSharp 编程平台&#xff1a;Visual Studio 2022   一、问题背景 | 开发库存系统 图1 位置同步失败问题 图2 位置正常同步效果表现 黑框 作用于 UnityEngine.UI.GridLayoutGruop&#xff0c;形成 4x6 布局&#xff0c;如…

红日靶场-1详细解析(适合小白版)

红日靶场涉及内网知识&#xff0c;和前期靶场不太一样&#xff0c;前期靶场大部分都是单个靶机获得root权限&#xff0c;而这一次更综合&#xff0c;后期也会继续学习内网知识&#xff0c;继续打红日靶场&#xff0c;提高自己的综合技能。 环境搭建 首先本题的网络拓扑结构如…

LabVIEW大数据处理

在物联网、工业4.0和科学实验中&#xff0c;大数据处理需求逐年上升。LabVIEW作为一款图形化编程语言&#xff0c;凭借其强大的数据采集和分析能力&#xff0c;广泛应用于实时数据处理和控制系统中。然而&#xff0c;在面对大数据处理时&#xff0c;LabVIEW也存在一些注意事项。…

小米路由器用外网域名访问管理界面

本文在Redmi AX3000 (RA81)设置&#xff0c;其他型号路由器的管理界面端口可能各不相同。 开始之前需要保证路由器SSH功能正常&#xff0c;如果没有SSH可以参考这里。 1. 给WAN口开放80端口 可以通过下载mixbox的firewall插件或者其他防火墙插件开放端口。 2. 把域名解析到路…

【AI图像生成网站Golang】雪花算法

AI图像生成网站 目录 一、项目介绍 二、雪花算法 三、JWT认证与令牌桶算法 四、项目架构 五、图床上传与图像生成API搭建 六、项目测试与调试(等待更新) 雪花算法 雪花算法 (Snowflake) 是一种高效、可扩展的分布式唯一ID生成算法&#xff0c;最早由 Twitter 开发&…

【计算机网络】协议定制

一、结构化数据传输流程 这里涉及协议定制、序列化/反序列化的知识 对于序列化和反序列化&#xff0c;有现成的解决方案&#xff1a;①json ②probuff ③xml 二、理解发送接收函数 我们调用的所有发送/接收函数&#xff0c;根本就不是把数据发送到网络中&#xff01;本质都是…

用sqlmap工具打sqli-labs前20关靶场

这个星期我们用手动注入打了前20关靶场&#xff0c;今天我们用sqlmap直接梭哈前20关 1.介绍sqlmap sqlmap是一个自动化的SQL注入工具&#xff0c;其主要功能是扫描&#xff0c;发现并利用给定的URL和SQL注入漏洞。 2.下载和使用sqlmap 官方下载地址&#xff1a;GitHub - sq…