前言
在当初的日常开发中,不论前端还是后端,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
办法。
最初的最初
由自己程度所限,不免有谬误以及不足之处, 屏幕前的靓仔靓女们
如有发现,恳请指出!
最初,谢谢你看到这里,谢谢你认真对待我的致力,心愿这篇博客对你有所帮忙!
你轻轻地点了个赞,那将在我的心里世界削减一颗亮堂而夺目的星!