前言

在现在的日常开发中,不管前端还是后端,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<Game> 转成 JSON 字符串
String gameListJson = gson.toJson(gameList);

将 JSON 字符串 转成 List:fromJson

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

// 将 JSON 字符串 转成 List<Game>
List<Game> gameListFromJson = gson.fromJson(gameListJson, new TypeToken<List<Game>>() {}.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<Game> 转成 JSON 字符串
String gameListJson = JSONUtil.toJsonStr(gameList);

将 JSON 字符串 转成 List:toList

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

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

总结

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

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

最后的最后

由本人水平所限,难免有错误以及不足之处, 屏幕前的靓仔靓女们 如有发现,恳请指出!

最后,谢谢你看到这里,谢谢你认真对待我的努力,希望这篇博客对你有所帮助!

你轻轻地点了个赞,那将在我的心里世界增添一颗明亮而耀眼的星!

JSON 与 Java 对象之间的转化的更多相关文章

  1. JSON 与JAVA对象之间的转换(转)

    JSON与XML两者目前在数据交互方面都有很高的使用率,随着现在SOA的兴起,异构系统的整合地位相应提高,本篇文章主要介绍JSON与JAVA对象之间的相互转换. 一.对普通类型的JSON模式的转换 一 ...

  2. json、xml和java对象之间的转化

    其实从面相对象的角度来理解这个问题,就会很清晰.java中的一切皆对象即把世间万物(Everything in the world)看做java对象,任何处理不了的问题都可以先转化成java对象在做处 ...

  3. Gson进行json字符串和对象之间的转化

    Gson可以实现对象与json字符串之间的转化,以下是在Android中的示例代码. Gson主页:https://code.google.com/p/google-gson/ public clas ...

  4. JAVA里面json和java对象之间的相互转换

    1. 把java 对象列表转换为json对象数组,并转为字符串 JSONArray array = JSONArray.fromObject(list);    String jsonstr = ar ...

  5. XML字符串和JAVA对象之间的转化

     1.JAXB中相关的注解.类和接口说明 JAXB 中主要的一些注解 - shenyunsese 的专栏 - CSDN 博客 注:教程很全面很详细.但是仅供参考. 主要疑问区分和说明:  1.1 @X ...

  6. C# .net中json字符串和对象之间的转化方法

    http://blog.csdn.net/xuexiaodong009/article/details/46998069 json作为作为一种最常用的数据,应用很广泛,在.net中如何把一个对象转化为 ...

  7. Json与Java对象互转之Gson学习

    Json与Java对象互转之Gson学习 请尊重他人的劳动成果.转载请注明出处:Json与Java对象互转之Gson学习         我曾在<XML,Object,Json转换之浅析Xstr ...

  8. Spring: 读取 .properties 文件地址,json转java对象,el使用java类方法相关 (十三)

    1. 在Java中获取 .properties 文件的路径 (src/main/resources 下) ProjectName |---src/main/java |---src/main/reso ...

  9. jackson 进行json与java对象转换 之三

    2.测试类,没用Junit,用Main()方法输出. package test; import java.io.IOException; import java.util.ArrayList; imp ...

  10. android开发中json与java对象相互转换

    json与java对象的相互转换.(使用com.google.gson) 在Android开发过程中,客户端总是需要从服务器获取数据,包括XML和json格式,目前json格式的数据使用较为普遍,所以 ...

随机推荐

  1. 升级adb

    adb 是没有自动升级的命令的,如果想要更新adb的版本,需要在网上找到自己想要的版本进行更新. 为什么要更新呢? 肯定是在使用中遇到了什么问题必须升级版本才能解决,如果不影响使用,那都无所谓.这里提 ...

  2. JS实现异步的方法:回调函数callback、事件监听、setTimeout、Promise、生成器Generators/yield、async/awt

    所有异步任务都是在同步任务执行结束之后,从任务队列中依次取出执行. 回调函数是异步操作最基本的方法,比如AJAX回调,回调函数的优点是简单.容易理解和实现,缺点是不利于代码的阅读和维护,各个部分之间高 ...

  3. P2P网络

    P2P 网络是什么 点对点技术(peer-to-peer, 简称 P2P )又称对等互联网络技术,是一种网络技术,依赖网络中参与者的计算能力和带宽,而不是把依赖都聚集在较少的几台服务器上. 即不是传统 ...

  4. MBR和gpt说明

    1.MBR MBR的全称是Master Boot Record(主引导记录),MBR早在1983年IBM PC DOS 2.0中就已经提出.之所以叫"主引导记录",是因为它是存在于 ...

  5. jmeter中使用csv文件时设置编码

    1.新建XLS文件,另存为CSV格式文件 2.在jmeter中可以尝试将编码设置成GB2312,或者utf-8

  6. 2022 ICPC沈阳合肥游记

    选赛区的时候很争议,除了沈阳是确定要选,队友对于合肥新赛区的看法很质疑,但我想选合肥,一是觉得人少,二是觉得强队会少,因为隔壁CCPC.然后就选了合肥,看情况选合肥确实很对. 一开始也不认为会拿牌,后 ...

  7. L0范式、L1范式、L2范式解释通俗版

    L0范数是指向量中非0的元素的个数.(L0范数很难优化求解) L1范数是指向量中各个元素绝对值之和 L2范数是指向量各元素的平方和然后求平方根 L1范数可以进行特征选择,即让特征的系数变为0. L2范 ...

  8. Oracle学习-----基本SQL select语句

    一.基本select语句 SELECT 标识  选择那些列 FROM     标识从哪个表中选择 select * 标识 全部选择 select department_id, location_id ...

  9. pintia 3-7-5 逆波兰表达式求值 (20 分)

    3-7-5 逆波兰表达式求值 (20 分) 逆波兰表示法是一种将运算符(operator)写在操作数(operand)后面 的描述程序(算式)的方法.举个例子,我们平常用中缀表示法描述的算式(1 + ...

  10. jQuery实现论坛发帖Demo

    目录 效果展示 思路 代码 改进空间 效果展示 思路 主要知识点:运用jQuery对HTML元素节点的操作(append)来添加帖子. 交互设计:用户点击页面上的"论坛发帖"按钮, ...