详解JSON与 Java对象之间的转化

 更新时间:2023年03月28日 09:53:18   作者:god23bin  
在现在的日常开发中,不管前端还是后端,JSON 格式的数据是用得比较多的,甚至可以说无处不在。所以本文主要来讲讲JSON 格式的数据与 Java 对象之间的转化吧

前言

在现在的日常开发中,不管前端还是后端,JSON 格式的数据是用得比较多的,甚至可以说无处不在。

接触最多的就是 POST 请求中传递的数据一般以 JSON 的格式放在请求体中,而且服务端各种 API 返回的数据,在响应体中也基本都是以 JSON 格式的数据进行返回的,这也是 RESTful 风格的体现之一。

当然,不止是请求与响应的过程中使用到 JSON,在某些业务场景下也是需要用到 JSON 的,特别是 JSON 与 Java 对象之间的转化

所以,对于 Java 开发的我们来说,JSON 格式的数据与 Java 对象之间的转化是必会的。

转化的工具

主流的转化工具有如下几种,一般项目中建议只选其中一种,目前好评最多的感觉就是 Jackson 了。

  • Jackson
  • FastJson
  • Gson
  • Hutool

准备的 JSON 字符串和 List

为了方便演示,这里给出一个 JSON 字符串:

String jsonStr = "{\"name\" : \"GTA5\", \"price\" : 54.5}";

这里给出一个 List<Game>

Game game1 = Game.builder().name("NBA2K23").price(new BigDecimal("198.0")).build();
Game game2 = Game.builder().name("Sim City4").price(new BigDecimal("22.5")).build();
List<Game> gameList = new ArrayList<>();
gameList.add(game1);
gameList.add(game2);

Jackson

我们需要借助 Jackson 提供的 ObjectMapper 对象来完成转化:

ObjectMapper objectMapper = new ObjectMapper();

将 JSON 字符串 转成 Java 对象:readValue

使用 readValue 方法,第一个参数是 JSON 字符串,第二个参数是转化的目标类的类型。

// 将 JSON 字符串 转成 Java 对象
Game game = objectMapper.readValue(jsonStr, Game.class);

将 Java 对象转成 JSON 字符串:writeValueAsString

使用 writeValueAsString 方法,接受一个 Java 对象,返回一个 JSON 字符串。

// 将 Java 对象转成 JSON 字符串
String gameJson = objectMapper.writeValueAsString(game);

将 List 转成 JSON 字符串:writeValueAsString

同样使用 writeValueAsString 方法。

// 将 List<Game> 转成 JSON 字符串
String gameListJson = objectMapper.writeValueAsString(gameList);

将 JSON 字符串 转成 List:readValue

使用 readValue 方法,第一个参数是 JSON 字符串,第二个参数是转化的目标 TypeReference(类型参照)对象,这里指定其泛型为 List<Game>

// 将 JSON 字符串 转成 List<Game>
List<Game> gameListFromJson = objectMapper.readValue(gameListJson, new TypeReference<List<Game>>() {});

总结

从 JSON 到 Java 对象,使用 readValue 方法。

从 Java 对象到 JSON,使用 writeValueAsString 方法。

FastJson

我们需要借助 FastJson 提供的 JSONObject 对象来完成转化。

将 JSON 字符串 转成 Java 对象:parseObject

使用 parseObject 方法,将 JSON 字符串解析(转化)成 Java 对象,第一个参数是 JSON 字符串,第二个参数是目标类的类型。

// 将 JSON 字符串 转成 Java 对象
Game game = JSONObject.parseObject(jsonStr, Game.class);

将 Java 对象转成 JSON 字符串:toJSONString

使用 toJSONString 方法,将 Java 对象直接转成 JSON 字符串,接受一个 Java 对象,返回对应的 JSON 字符串。

// 将 Java 对象转成 JSON 字符串
String gameJson = JSONObject.toJSONString(game);

将 List 转成 JSON 字符串:toJSONString

同理,可以直接丢一个 List 对象给 toJSONString 方法,把 List 转成 JSON 字符串。

// 将 List<Game> 转成 JSON 字符串
String gameListJson = JSONObject.toJSONString(gameList);

将 JSON 字符串 转成 List:parseArray

使用 parseArray 方法,将 JSON 字符串解析成 List。2.0 版本需要调用 toJavaList 方法,得到最后的 List

// 将 JSON 字符串 转成 List<Game>
// fastjson 1.2.x 版本:List<Game> gameListFromJson = JSONObject.parseArray(gameListJson, Game.class);
List<Game> gameListFromJson = JSONArray.parseArray(gameListJson).toJavaList(Game.class);

总结

JSON 转成 Java Bean 使用 parseObject 方法,转成 List 使用 parseArray 方法。

任意对象转成 JSON,则使用 toJSONString 方法。

Gson

我们需要借助 Gson 对象来完成转化:

Gson gson = new Gson();

将 JSON 字符串 转成 Java 对象:fromJson

使用 fromJson 方法,两个参数的定义也是和上面两个一样的。

// 将 JSON 字符串 转成 Java 对象
Game game = gson.fromJson(jsonStr, Game.class);

将 Java 对象转成 JSON 字符串:toJson

使用 toJson 方法,接受一个 Java 对象,然后返回对应的 JSON 字符串。

// 将 Java 对象转成 JSON 字符串
String gameJson = gson.toJson(game);

将 List 转成 JSON 字符串:toJson

List 也是同理,使用 toJson 方法。

// 将 List&lt;Game&gt; 转成 JSON 字符串
String gameListJson = gson.toJson(gameList);

将 JSON 字符串 转成 List:fromJson

这里和 Jackson 的也是类似,第二个参数使用 TypeToken 对象指定转化的目标类型为 List<Game>

// 将 JSON 字符串 转成 List&lt;Game&gt;
List&lt;Game&gt; gameListFromJson = gson.fromJson(gameListJson, new TypeToken&lt;List&lt;Game&gt;&gt;() {}.getType());

总结

从 JSON 到 Java 对象,使用 fromJson 方法。

从 Java 对象到 JSON,使用 toJson 方法。

Hutool

我们需要借助 Hutool 提供的 JSONUtil 对象来完成转化。

将 JSON 字符串 转成 Java 对象:toBean

使用 toBean 方法,还是同样的,接受的两个参数,一个字符串,一个目标类的类型。

// 将 JSON 字符串 转成 Java 对象
Game game = JSONUtil.toBean(jsonStr, Game.class);

将 Java 对象转成 JSON 字符串:toJsonStr

使用 toJsonStr 方法,接受一个 Java 对象,返回一个 JSON 字符串。

// 将 Java 对象转成 JSON 字符串
String gameJson = JSONUtil.toJsonStr(game);

将 List 转成 JSON 字符串:toJsonStr

同理,也是 toJsonStr 方法。

// 将 List&lt;Game&gt; 转成 JSON 字符串
String gameListJson = JSONUtil.toJsonStr(gameList);

将 JSON 字符串 转成 List:toList

使用 toList 方法,和 toBean 方法接受的参数一样。

// 将 JSON 字符串 转成 List&lt;Game&gt;
List&lt;Game&gt; gameListFromJson = JSONUtil.toList(gameListJson, Game.class);

总结

JSON 转成 Java Bean 使用 toBean 方法,转成 List 使用 toList 方法。

任意对象转成 JSON,则使用 toJsonStr 方法。

到此这篇关于详解JSON与 Java对象之间的转化的文章就介绍到这了,更多相关JSON Java对象内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Mybatis映射文件规则实例详解

    Mybatis映射文件规则实例详解

    在映射文件当中,mapper元素是映射文件的根元素,其他的标签都是它的子元素,下面这篇文章主要给大家介绍了关于Mybatis映射文件规则的相关资料,需要的朋友可以参考下
    2022-04-04
  • Java多线程父线程向子线程传值问题及解决

    Java多线程父线程向子线程传值问题及解决

    文章总结了5种解决父子之间数据传递困扰的解决方案,包括ThreadLocal+TaskDecorator、UserUtils、CustomTaskDecorator、ExecutorConfig、RequestContextHolder+TaskDecorator、MDC+TaskDecorator和InheritableThreadLocal
    2025-02-02
  • Java之SpringBoot-Thymeleaf详情

    Java之SpringBoot-Thymeleaf详情

    聊Thymeleaf,需要知道为什么到了SpringBoot中就不用JSP了?这跟SpringBoot打包方式有点关系,SpringBoot项目打包是jar包,下面文章小编就对此做一个详细介绍,需要的朋友可以参考一下
    2021-09-09
  • Java中double保留两位小数的多种方法

    Java中double保留两位小数的多种方法

    这篇文章主要给大家介绍了关于Java中double保留两位小数的多种方法,对于double数据类型进行计算发生的精度丢失的情况,可以按照自己的需求选择任意方式,需要的朋友可以参考下
    2023-07-07
  • SpringBoot配置Https入门实践

    SpringBoot配置Https入门实践

    本文主要介绍了SpringBoot配置Https入门实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-11-11
  • idea中springboot整合mybatis找不到mapper接口的原因分析

    idea中springboot整合mybatis找不到mapper接口的原因分析

    这篇文章主要介绍了idea中springboot整合mybatis找不到mapper接口的原因分析及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • springmvc如何使用POJO作为参数

    springmvc如何使用POJO作为参数

    这篇文章主要介绍了springmvc如何使用POJO作为参数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • Filter在springboot中的使用方法详解

    Filter在springboot中的使用方法详解

    这篇文章主要介绍了Filter在springboot中的使用方法详解,filter(过滤器)作用于在intreceptor(拦截器)之前,不像intreceptor一样依赖于springmvc框架,只需要依赖于serverlet,需要的朋友可以参考下
    2023-08-08
  • 浅谈java 中equals和==的区别

    浅谈java 中equals和==的区别

    这篇文章主要介绍了java 中equals和==的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • 解析Java异常的栈轨迹及其相关方法

    解析Java异常的栈轨迹及其相关方法

    这篇文章主要介绍了解析Java异常的栈轨迹及其相关方法,包括栈轨迹的打印和fillInStackTrace方法等,需要的朋友可以参考下
    2015-11-11

最新评论