您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“JSON與Java對象之間的轉(zhuǎn)化方法是什么”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
在現(xiàn)在的日常開發(fā)中,不管前端還是后端,JSON 格式的數(shù)據(jù)是用得比較多的,甚至可以說無處不在。
接觸最多的就是 POST 請求中傳遞的數(shù)據(jù)一般以 JSON 的格式放在請求體中,而且服務(wù)端各種 API 返回的數(shù)據(jù),在響應(yīng)體中也基本都是以 JSON 格式的數(shù)據(jù)進(jìn)行返回的,這也是 RESTful 風(fēng)格的體現(xiàn)之一。
當(dāng)然,不止是請求與響應(yīng)的過程中使用到 JSON,在某些業(yè)務(wù)場景下也是需要用到 JSON 的,特別是 JSON 與 Java 對象之間的轉(zhuǎn)化。所以,對于 Java 開發(fā)的我們來說,JSON 格式的數(shù)據(jù)與 Java 對象之間的轉(zhuǎn)化是必會的。
主流的轉(zhuǎn)化工具有如下幾種,一般項目中建議只選其中一種,目前好評最多的感覺就是 Jackson 了。
Jackson
FastJson
Gson
Hutool
為了方便演示,這里給出一個 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 提供的 ObjectMapper
對象來完成轉(zhuǎn)化:
ObjectMapper objectMapper = new ObjectMapper();
將 JSON 字符串 轉(zhuǎn)成 Java 對象:readValue
使用 readValue
方法,第一個參數(shù)是 JSON 字符串,第二個參數(shù)是轉(zhuǎn)化的目標(biāo)類的類型。
// 將 JSON 字符串 轉(zhuǎn)成 Java 對象 Game game = objectMapper.readValue(jsonStr, Game.class);
將 Java 對象轉(zhuǎn)成 JSON 字符串:writeValueAsString
使用 writeValueAsString
方法,接受一個 Java 對象,返回一個 JSON 字符串。
// 將 Java 對象轉(zhuǎn)成 JSON 字符串 String gameJson = objectMapper.writeValueAsString(game);
將 List 轉(zhuǎn)成 JSON 字符串:writeValueAsString
同樣使用 writeValueAsString
方法。
// 將 List<Game> 轉(zhuǎn)成 JSON 字符串 String gameListJson = objectMapper.writeValueAsString(gameList);
將 JSON 字符串 轉(zhuǎn)成 List:readValue
使用 readValue
方法,第一個參數(shù)是 JSON 字符串,第二個參數(shù)是轉(zhuǎn)化的目標(biāo) TypeReference(類型參照)對象,這里指定其泛型為 List<Game>
。
// 將 JSON 字符串 轉(zhuǎn)成 List<Game> List<Game> gameListFromJson = objectMapper.readValue(gameListJson, new TypeReference<List<Game>>() {});
總結(jié)
從 JSON 到 Java 對象,使用 readValue
方法。
從 Java 對象到 JSON,使用 writeValueAsString
方法。
我們需要借助 FastJson 提供的 JSONObject
對象來完成轉(zhuǎn)化。
將 JSON 字符串 轉(zhuǎn)成 Java 對象:parseObject
使用 parseObject
方法,將 JSON 字符串解析(轉(zhuǎn)化)成 Java 對象,第一個參數(shù)是 JSON 字符串,第二個參數(shù)是目標(biāo)類的類型。
// 將 JSON 字符串 轉(zhuǎn)成 Java 對象 Game game = JSONObject.parseObject(jsonStr, Game.class);
將 Java 對象轉(zhuǎn)成 JSON 字符串:toJSONString
使用 toJSONString
方法,將 Java 對象直接轉(zhuǎn)成 JSON 字符串,接受一個 Java 對象,返回對應(yīng)的 JSON 字符串。
// 將 Java 對象轉(zhuǎn)成 JSON 字符串 String gameJson = JSONObject.toJSONString(game);
將 List 轉(zhuǎn)成 JSON 字符串:toJSONString
同理,可以直接丟一個 List 對象給 toJSONString
方法,把 List 轉(zhuǎn)成 JSON 字符串。
// 將 List<Game> 轉(zhuǎn)成 JSON 字符串 String gameListJson = JSONObject.toJSONString(gameList);
將 JSON 字符串 轉(zhuǎn)成 List:parseArray
使用 parseArray
方法,將 JSON 字符串解析成 List。2.0 版本需要調(diào)用 toJavaList
方法,得到最后的 List
// 將 JSON 字符串 轉(zhuǎn)成 List<Game> // fastjson 1.2.x 版本:List<Game> gameListFromJson = JSONObject.parseArray(gameListJson, Game.class); List<Game> gameListFromJson = JSONArray.parseArray(gameListJson).toJavaList(Game.class);
總結(jié)
JSON 轉(zhuǎn)成 Java Bean 使用 parseObject
方法,轉(zhuǎn)成 List 使用 parseArray
方法。
任意對象轉(zhuǎn)成 JSON,則使用 toJSONString
方法。
我們需要借助 Gson
對象來完成轉(zhuǎn)化:
Gson gson = new Gson();
將 JSON 字符串 轉(zhuǎn)成 Java 對象:fromJson
使用 fromJson
方法,兩個參數(shù)的定義也是和上面兩個一樣的。
// 將 JSON 字符串 轉(zhuǎn)成 Java 對象 Game game = gson.fromJson(jsonStr, Game.class);
將 Java 對象轉(zhuǎn)成 JSON 字符串:toJson
使用 toJson
方法,接受一個 Java 對象,然后返回對應(yīng)的 JSON 字符串。
// 將 Java 對象轉(zhuǎn)成 JSON 字符串 String gameJson = gson.toJson(game);
將 List 轉(zhuǎn)成 JSON 字符串:toJson
List 也是同理,使用 toJson
方法。
// 將 List<Game> 轉(zhuǎn)成 JSON 字符串 String gameListJson = gson.toJson(gameList);
將 JSON 字符串 轉(zhuǎn)成 List:fromJson
這里和 Jackson 的也是類似,第二個參數(shù)使用 TypeToken
對象指定轉(zhuǎn)化的目標(biāo)類型為 List<Game>
。
// 將 JSON 字符串 轉(zhuǎn)成 List<Game> List<Game> gameListFromJson = gson.fromJson(gameListJson, new TypeToken<List<Game>>() {}.getType());
總結(jié)
從 JSON 到 Java 對象,使用 fromJson
方法。
從 Java 對象到 JSON,使用 toJson
方法。
我們需要借助 Hutool 提供的 JSONUtil
對象來完成轉(zhuǎn)化。
將 JSON 字符串 轉(zhuǎn)成 Java 對象:toBean
使用 toBean
方法,還是同樣的,接受的兩個參數(shù),一個字符串,一個目標(biāo)類的類型。
// 將 JSON 字符串 轉(zhuǎn)成 Java 對象 Game game = JSONUtil.toBean(jsonStr, Game.class);
將 Java 對象轉(zhuǎn)成 JSON 字符串:toJsonStr
使用 toJsonStr
方法,接受一個 Java 對象,返回一個 JSON 字符串。
// 將 Java 對象轉(zhuǎn)成 JSON 字符串 String gameJson = JSONUtil.toJsonStr(game);
將 List 轉(zhuǎn)成 JSON 字符串:toJsonStr
同理,也是 toJsonStr
方法。
// 將 List<Game> 轉(zhuǎn)成 JSON 字符串 String gameListJson = JSONUtil.toJsonStr(gameList);
將 JSON 字符串 轉(zhuǎn)成 List:toList
使用 toList
方法,和 toBean
方法接受的參數(shù)一樣。
// 將 JSON 字符串 轉(zhuǎn)成 List<Game> List<Game> gameListFromJson = JSONUtil.toList(gameListJson, Game.class);
總結(jié)
JSON 轉(zhuǎn)成 Java Bean 使用 toBean
方法,轉(zhuǎn)成 List 使用 toList
方法。
任意對象轉(zhuǎn)成 JSON,則使用 toJsonStr
方法。
“JSON與Java對象之間的轉(zhuǎn)化方法是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。