• 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 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 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 转成 JSON 字符串
    String gameListJson = objectMapper.writeValueAsString(gameList);
    

    将 JSON 字符串 转成 List:readValue

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

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

    总结

    从 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 转成 JSON 字符串
    String gameListJson = JSONObject.toJSONString(gameList);
    

    将 JSON 字符串 转成 List:parseArray

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

    // 将 JSON 字符串 转成 List
    // fastjson 1.2.x 版本:List gameListFromJson = JSONObject.parseArray(gameListJson, Game.class);
    List 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 转成 JSON 字符串
    String gameListJson = gson.toJson(gameList);
    

    将 JSON 字符串 转成 List:fromJson

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

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

    将 JSON 字符串 转成 List:toList

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

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

    总结

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

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

    最后的最后

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

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

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

  • 相关阅读:
    计算几何(待填坑)
    Python3 中的 random模块
    Docker快速构建HaProxy集群,并配置好rabbitmq的负载均衡
    算法题笔记 6-10 (青蛙跳台阶)
    独享IP是原生IP吗?
    暑假加餐|有钱人和你想的不一样(第16天)+基于蒙特卡罗的电力系统可靠地评估(Matlab代码实现)
    【C++从0到王者】第二十六站:一些经典的多态面试题
    【Java|golang】1710. 卡车上的最大单元数---桶排序和排序对比
    Vue3语法-双向绑定
    【C++】哈希表特性总结及unordered_map和unordered_set的模拟实现
  • 原文地址:https://www.cnblogs.com/god23bin/p/json-to-java.html