欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解JSON與?Java對(duì)象之間的轉(zhuǎn)化

 更新時(shí)間:2023年03月28日 09:53:18   作者:god23bin  
在現(xiàn)在的日常開發(fā)中,不管前端還是后端,JSON?格式的數(shù)據(jù)是用得比較多的,甚至可以說(shuō)無(wú)處不在。所以本文主要來(lái)講講JSON?格式的數(shù)據(jù)與?Java?對(duì)象之間的轉(zhuǎn)化吧

前言

在現(xiàn)在的日常開發(fā)中,不管前端還是后端,JSON 格式的數(shù)據(jù)是用得比較多的,甚至可以說(shuō)無(wú)處不在。

接觸最多的就是 POST 請(qǐng)求中傳遞的數(shù)據(jù)一般以 JSON 的格式放在請(qǐng)求體中,而且服務(wù)端各種 API 返回的數(shù)據(jù),在響應(yīng)體中也基本都是以 JSON 格式的數(shù)據(jù)進(jìn)行返回的,這也是 RESTful 風(fēng)格的體現(xiàn)之一。

當(dāng)然,不止是請(qǐng)求與響應(yīng)的過(guò)程中使用到 JSON,在某些業(yè)務(wù)場(chǎng)景下也是需要用到 JSON 的,特別是 JSON 與 Java 對(duì)象之間的轉(zhuǎn)化。

所以,對(duì)于 Java 開發(fā)的我們來(lái)說(shuō),JSON 格式的數(shù)據(jù)與 Java 對(duì)象之間的轉(zhuǎn)化是必會(huì)的。

轉(zhuǎn)化的工具

主流的轉(zhuǎn)化工具有如下幾種,一般項(xiàng)目中建議只選其中一種,目前好評(píng)最多的感覺(jué)就是 Jackson 了。

  • Jackson
  • FastJson
  • Gson
  • Hutool

準(zhǔn)備的 JSON 字符串和 List

為了方便演示,這里給出一個(gè) JSON 字符串:

String jsonStr = "{\"name\" : \"GTA5\", \"price\" : 54.5}";

這里給出一個(gè) 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 對(duì)象來(lái)完成轉(zhuǎn)化:

ObjectMapper objectMapper = new ObjectMapper();

將 JSON 字符串 轉(zhuǎn)成 Java 對(duì)象:readValue

使用 readValue 方法,第一個(gè)參數(shù)是 JSON 字符串,第二個(gè)參數(shù)是轉(zhuǎn)化的目標(biāo)類的類型。

// 將 JSON 字符串 轉(zhuǎn)成 Java 對(duì)象
Game game = objectMapper.readValue(jsonStr, Game.class);

將 Java 對(duì)象轉(zhuǎn)成 JSON 字符串:writeValueAsString

使用 writeValueAsString 方法,接受一個(gè) Java 對(duì)象,返回一個(gè) JSON 字符串。

// 將 Java 對(duì)象轉(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 方法,第一個(gè)參數(shù)是 JSON 字符串,第二個(gè)參數(shù)是轉(zhuǎn)化的目標(biāo) TypeReference(類型參照)對(duì)象,這里指定其泛型為 List<Game>。

// 將 JSON 字符串 轉(zhuǎn)成 List<Game>
List<Game> gameListFromJson = objectMapper.readValue(gameListJson, new TypeReference<List<Game>>() {});

總結(jié)

從 JSON 到 Java 對(duì)象,使用 readValue 方法。

從 Java 對(duì)象到 JSON,使用 writeValueAsString 方法。

FastJson

我們需要借助 FastJson 提供的 JSONObject 對(duì)象來(lái)完成轉(zhuǎn)化。

將 JSON 字符串 轉(zhuǎn)成 Java 對(duì)象:parseObject

使用 parseObject 方法,將 JSON 字符串解析(轉(zhuǎn)化)成 Java 對(duì)象,第一個(gè)參數(shù)是 JSON 字符串,第二個(gè)參數(shù)是目標(biāo)類的類型。

// 將 JSON 字符串 轉(zhuǎn)成 Java 對(duì)象
Game game = JSONObject.parseObject(jsonStr, Game.class);

將 Java 對(duì)象轉(zhuǎn)成 JSON 字符串:toJSONString

使用 toJSONString 方法,將 Java 對(duì)象直接轉(zhuǎn)成 JSON 字符串,接受一個(gè) Java 對(duì)象,返回對(duì)應(yīng)的 JSON 字符串。

// 將 Java 對(duì)象轉(zhuǎn)成 JSON 字符串
String gameJson = JSONObject.toJSONString(game);

將 List 轉(zhuǎn)成 JSON 字符串:toJSONString

同理,可以直接丟一個(gè) List 對(duì)象給 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 方法。

任意對(duì)象轉(zhuǎn)成 JSON,則使用 toJSONString 方法。

Gson

我們需要借助 Gson 對(duì)象來(lái)完成轉(zhuǎn)化:

Gson gson = new Gson();

將 JSON 字符串 轉(zhuǎn)成 Java 對(duì)象:fromJson

使用 fromJson 方法,兩個(gè)參數(shù)的定義也是和上面兩個(gè)一樣的。

// 將 JSON 字符串 轉(zhuǎn)成 Java 對(duì)象
Game game = gson.fromJson(jsonStr, Game.class);

將 Java 對(duì)象轉(zhuǎn)成 JSON 字符串:toJson

使用 toJson 方法,接受一個(gè) Java 對(duì)象,然后返回對(duì)應(yīng)的 JSON 字符串。

// 將 Java 對(duì)象轉(zhuǎn)成 JSON 字符串
String gameJson = gson.toJson(game);

將 List 轉(zhuǎn)成 JSON 字符串:toJson

List 也是同理,使用 toJson 方法。

// 將 List&lt;Game&gt; 轉(zhuǎn)成 JSON 字符串
String gameListJson = gson.toJson(gameList);

將 JSON 字符串 轉(zhuǎn)成 List:fromJson

這里和 Jackson 的也是類似,第二個(gè)參數(shù)使用 TypeToken 對(duì)象指定轉(zhuǎn)化的目標(biāo)類型為 List<Game>

// 將 JSON 字符串 轉(zhuǎn)成 List&lt;Game&gt;
List&lt;Game&gt; gameListFromJson = gson.fromJson(gameListJson, new TypeToken&lt;List&lt;Game&gt;&gt;() {}.getType());

總結(jié)

從 JSON 到 Java 對(duì)象,使用 fromJson 方法。

從 Java 對(duì)象到 JSON,使用 toJson 方法。

Hutool

我們需要借助 Hutool 提供的 JSONUtil 對(duì)象來(lái)完成轉(zhuǎn)化。

將 JSON 字符串 轉(zhuǎn)成 Java 對(duì)象:toBean

使用 toBean 方法,還是同樣的,接受的兩個(gè)參數(shù),一個(gè)字符串,一個(gè)目標(biāo)類的類型。

// 將 JSON 字符串 轉(zhuǎn)成 Java 對(duì)象
Game game = JSONUtil.toBean(jsonStr, Game.class);

將 Java 對(duì)象轉(zhuǎn)成 JSON 字符串:toJsonStr

使用 toJsonStr 方法,接受一個(gè) Java 對(duì)象,返回一個(gè) JSON 字符串。

// 將 Java 對(duì)象轉(zhuǎn)成 JSON 字符串
String gameJson = JSONUtil.toJsonStr(game);

將 List 轉(zhuǎn)成 JSON 字符串:toJsonStr

同理,也是 toJsonStr 方法。

// 將 List&lt;Game&gt; 轉(zhuǎn)成 JSON 字符串
String gameListJson = JSONUtil.toJsonStr(gameList);

將 JSON 字符串 轉(zhuǎn)成 List:toList

使用 toList 方法,和 toBean 方法接受的參數(shù)一樣。

// 將 JSON 字符串 轉(zhuǎn)成 List&lt;Game&gt;
List&lt;Game&gt; gameListFromJson = JSONUtil.toList(gameListJson, Game.class);

總結(jié)

JSON 轉(zhuǎn)成 Java Bean 使用 toBean 方法,轉(zhuǎn)成 List 使用 toList 方法。

任意對(duì)象轉(zhuǎn)成 JSON,則使用 toJsonStr 方法。

到此這篇關(guān)于詳解JSON與 Java對(duì)象之間的轉(zhuǎn)化的文章就介紹到這了,更多相關(guān)JSON Java對(duì)象內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java通過(guò)底層原碼了解數(shù)組拷貝

    Java通過(guò)底層原碼了解數(shù)組拷貝

    一般說(shuō)起數(shù)組的拷貝,首先想到的就是用循環(huán)對(duì)數(shù)組進(jìn)行拷貝。但其實(shí)JAVA為我們提供了一些拷貝數(shù)組比較方便的方法,有完全拷貝的方法,也有部分拷貝的方法。接下來(lái)就一一介紹這些方法
    2022-07-07
  • 詳談Java 異常處理的誤區(qū)和經(jīng)驗(yàn)總結(jié)(分享)

    詳談Java 異常處理的誤區(qū)和經(jīng)驗(yàn)總結(jié)(分享)

    下面小編就為大家分享一篇Java 異常處理的誤區(qū)和經(jīng)驗(yàn)總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • eclipse里沒(méi)有“Dynamic Web Project“這個(gè)選項(xiàng)的問(wèn)題解決

    eclipse里沒(méi)有“Dynamic Web Project“這個(gè)選項(xiàng)的問(wèn)題解決

    本文主要介紹了eclipse里沒(méi)有“Dynamic Web Project“這個(gè)選項(xiàng)的問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 在Spring Boot中實(shí)現(xiàn)HTTP緩存的方法

    在Spring Boot中實(shí)現(xiàn)HTTP緩存的方法

    緩存是HTTP協(xié)議的一個(gè)強(qiáng)大功能,但由于某些原因,它主要用于靜態(tài)資源,如圖像,CSS樣式表或JavaScript文件。本文重點(diǎn)給大家介紹在Spring Boot中實(shí)現(xiàn)HTTP緩存的方法,感興趣的朋友跟隨小編一起看看吧
    2018-10-10
  • Java使用POI實(shí)現(xiàn)導(dǎo)出Excel的方法詳解

    Java使用POI實(shí)現(xiàn)導(dǎo)出Excel的方法詳解

    在項(xiàng)目開發(fā)中往往需要使用到Excel的導(dǎo)入和導(dǎo)出,導(dǎo)入就是從Excel中導(dǎo)入到DB中,而導(dǎo)出就是從DB中查詢數(shù)據(jù)然后使用POI寫到Excel上。本文將利用POI實(shí)現(xiàn)導(dǎo)出Excel,需要的可以參考一下
    2022-10-10
  • Jenkins的安裝配置詳解

    Jenkins的安裝配置詳解

    這篇文章主要介紹了Jenkins的安裝配置詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • java編程實(shí)現(xiàn)郵件定時(shí)發(fā)送的方法

    java編程實(shí)現(xiàn)郵件定時(shí)發(fā)送的方法

    這篇文章主要介紹了java編程實(shí)現(xiàn)郵件定時(shí)發(fā)送的方法,涉及Java基于定時(shí)器實(shí)現(xiàn)計(jì)劃任務(wù)的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-11-11
  • Jersey框架的統(tǒng)一異常處理機(jī)制分析

    Jersey框架的統(tǒng)一異常處理機(jī)制分析

    初學(xué)者往往不清楚java的異常為什么會(huì)設(shè)計(jì)成這個(gè)樣子,他們通常會(huì)對(duì)異常只進(jìn)行簡(jiǎn)單的處理
    2016-07-07
  • 詳解Springboot應(yīng)用啟動(dòng)以及關(guān)閉時(shí)完成某些操作

    詳解Springboot應(yīng)用啟動(dòng)以及關(guān)閉時(shí)完成某些操作

    這篇文章主要介紹了詳解Springboot應(yīng)用啟動(dòng)以及關(guān)閉時(shí)完成某些操作,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • spring cloud 使用Zuul 實(shí)現(xiàn)API網(wǎng)關(guān)服務(wù)問(wèn)題

    spring cloud 使用Zuul 實(shí)現(xiàn)API網(wǎng)關(guān)服務(wù)問(wèn)題

    這篇文章主要介紹了spring cloud 使用Zuul 實(shí)現(xiàn)API網(wǎng)關(guān)服務(wù)問(wèn)題,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-05-05

最新評(píng)論