前言
在現在的日常開發中,不管前端還是后端,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 方法,
最后的最后
由本人水平所限,難免有錯誤以及不足之處, 螢屏前的靚仔靚女們 如有發現,懇請指出!
最后,謝謝你看到這里,謝謝你認真對待我的努力,希望這篇博客對你有所幫助!
你輕輕地點了個贊,那將在我的心里世界增添一顆明亮而耀眼的星!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/548313.html
標籤:Java
上一篇:EasyRelation發布,簡單強大的資料關聯框架
下一篇:這幾個SQL語法的坑,你踩過嗎
