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<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 对象之间的转化的更多相关文章
- JSON 与JAVA对象之间的转换(转)
JSON与XML两者目前在数据交互方面都有很高的使用率,随着现在SOA的兴起,异构系统的整合地位相应提高,本篇文章主要介绍JSON与JAVA对象之间的相互转换. 一.对普通类型的JSON模式的转换 一 ...
- json、xml和java对象之间的转化
其实从面相对象的角度来理解这个问题,就会很清晰.java中的一切皆对象即把世间万物(Everything in the world)看做java对象,任何处理不了的问题都可以先转化成java对象在做处 ...
- Gson进行json字符串和对象之间的转化
Gson可以实现对象与json字符串之间的转化,以下是在Android中的示例代码. Gson主页:https://code.google.com/p/google-gson/ public clas ...
- JAVA里面json和java对象之间的相互转换
1. 把java 对象列表转换为json对象数组,并转为字符串 JSONArray array = JSONArray.fromObject(list); String jsonstr = ar ...
- XML字符串和JAVA对象之间的转化
1.JAXB中相关的注解.类和接口说明 JAXB 中主要的一些注解 - shenyunsese 的专栏 - CSDN 博客 注:教程很全面很详细.但是仅供参考. 主要疑问区分和说明: 1.1 @X ...
- C# .net中json字符串和对象之间的转化方法
http://blog.csdn.net/xuexiaodong009/article/details/46998069 json作为作为一种最常用的数据,应用很广泛,在.net中如何把一个对象转化为 ...
- Json与Java对象互转之Gson学习
Json与Java对象互转之Gson学习 请尊重他人的劳动成果.转载请注明出处:Json与Java对象互转之Gson学习 我曾在<XML,Object,Json转换之浅析Xstr ...
- Spring: 读取 .properties 文件地址,json转java对象,el使用java类方法相关 (十三)
1. 在Java中获取 .properties 文件的路径 (src/main/resources 下) ProjectName |---src/main/java |---src/main/reso ...
- jackson 进行json与java对象转换 之三
2.测试类,没用Junit,用Main()方法输出. package test; import java.io.IOException; import java.util.ArrayList; imp ...
- android开发中json与java对象相互转换
json与java对象的相互转换.(使用com.google.gson) 在Android开发过程中,客户端总是需要从服务器获取数据,包括XML和json格式,目前json格式的数据使用较为普遍,所以 ...
随机推荐
- SaaS、PaaS、IaaS的区别
我们从SaaS.PaaS.IaaS的定义.工业应用以及具体案例几方面来介绍他们之间的区别 一.定义层面的区别 SaaS.PaaS.IaaS简单的说都属于云计算服务,也就是云计算+服务. 我们对于云计算 ...
- 关于vue模版动态加载按照指定条件
一.在data中定义要作为模版的变量,当前定义了两个 menuNavigation 和menuDetails 二.模版使用方式使用component中的 用v-bind:is 来使用其参数
- Coder vs Programmer: Difference You Should Know
In this tech-driven world, you may have heard the terms 'coder' and 'programmer' used interchangeabl ...
- Docker-compose安装Wordpress
Docker-compose实战Wordpress 96 iXiAo9 2019.01.10 18:54 字数 82 阅读 105评论 0喜欢 0 Docker-compose实战Wordpress ...
- 关于group by的一个问题
项目场景: 有时候,遇到数据库重复数据,需要将数据进行分组,并取出其中一条来展示,这时就需要用到group by语句.但是,如果mysql是高版本,当执行group by时,select的字段不属于g ...
- 12.15linux学习第十八天
今天老刘讲了如同天书一般的隐藏章节,第23章使用OpenLDAP部署目录服务,难度太高了.第16章使用Squid部署代理缓存服务 章节概述: 本章首先介绍代理服务的原理以及作用,然后介绍Squid服务 ...
- python中的变量定义
1 变量名:由下划线.字母和数字组成 2 python中变量名的特殊含义: xx:标准的标识符,共有的 _xx:只是在from - import *时是不会被导入的,其他导入方式会被引入 隐藏变量还有 ...
- P2330 繁忙的都市
题目描述 城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造.城市C的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个交叉路口之间最多有一条 ...
- 1js 高级
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- JMeter参数化(一)--CSV参数化
一.CSV Data Set Config 1.添加配置元件-CSV Data Set Config 其中,分隔符不能是参数化的值中的符号,否则会被截断. 2.调用 3.循环读取文件中数据 假设数据内 ...