最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中Json與List、Map、entity的互相轉(zhuǎn)化

 更新時(shí)間:2022年07月15日 17:12:21   作者:頂不住了  
在開(kāi)發(fā)中,Json轉(zhuǎn)換的場(chǎng)景往往也就是那么幾個(gè),本文主要介紹了Java中Json與List、Map、entity的互相轉(zhuǎn)化,具有一定的參考價(jià)值,感興趣的可以了解一下

在開(kāi)發(fā)中,Json轉(zhuǎn)換的場(chǎng)景往往也就是那么幾個(gè)。
1.將JavaBean轉(zhuǎn)換為json,或?qū)son字符串轉(zhuǎn)換為JavaBean。
2.將List集合轉(zhuǎn)換為json,或?qū)son轉(zhuǎn)換為L(zhǎng)ist集合。
3.將Map集合轉(zhuǎn)換為json,或?qū)son轉(zhuǎn)換為Map集合。

下面我們來(lái)看看如何使用

第一步:導(dǎo)入依賴

?? ??? ?<dependency>
? ? ? ? ? ? <groupId>com.google.code.gson</groupId>
? ? ? ? ? ? <artifactId>gson</artifactId>
? ? ? ? ? ? <version>2.8.6</version>
? ? ? ? </dependency>

第二步:開(kāi)始使用

場(chǎng)景一:轉(zhuǎn)換普通對(duì)象(Bean)。

1.將普通的JavaBean轉(zhuǎn)換為Json字符串是最常用的操作了,首先創(chuàng)建一個(gè)簡(jiǎn)單的類,例如:Person。

public class Person
{
? ? private String name;
? ? private int age;
? ? private boolean isMale;
? ? private List<String> hobbies;

?? ?// 省略構(gòu)造器和getter/setter方法,注意重寫toString方法,便于查看控制臺(tái)輸出。

? ? @Override
? ? public String toString()
? ? {
? ? ? ? final StringBuilder sb = new StringBuilder("Person{");
? ? ? ? sb.append("name='").append(name).append('\'');
? ? ? ? sb.append(", age=").append(age);
? ? ? ? sb.append(", isMale=").append(isMale);
? ? ? ? sb.append(", hobbies=").append(hobbies);
? ? ? ? sb.append('}');
? ? ? ? return sb.toString();
? ? }
}

2.使用Gson解析Person的實(shí)例。

    1  先創(chuàng)建Person對(duì)象。
    2  在創(chuàng)建Gson對(duì)象。
    3  調(diào)用Gson的String toJson(Object)方法,來(lái)將對(duì)象轉(zhuǎn)換為json字符串。

@Test
public void testBeanToJson()
{
? ? // 創(chuàng)建Bean
? ? Person p = new Person("艾倫·耶格爾", 16, true, Arrays.asList("自由", "迫害萊納"));
? ? // 創(chuàng)建Gson對(duì)象
? ? Gson gson = new Gson();
? ? // 調(diào)用Gson的String toJson(Object)方法將Bean轉(zhuǎn)換為json字符串
? ? String pJson = gson.toJson(p);

? ? System.out.println(pJson);
? ? // {"name":"艾倫·耶格爾","age":16,"isMale":true,"hobbies":["自由","迫害萊納"]}
}

3.將Person實(shí)例的json字符串轉(zhuǎn)換為Person對(duì)象。

調(diào)用Gson的 t fromJson(String, Class)方法,將Json串轉(zhuǎn)換為對(duì)象

// 調(diào)用Gson的 <T> t fromJson(String, Class)方法,將Json串轉(zhuǎn)換為對(duì)象
Person person = gson.fromJson(pJson, Person.class);
System.out.println(person);
// Person{name='艾倫·耶格爾', age=16, isMale=true, hobbies=[自由, 迫害萊納]}

使用場(chǎng)景二:轉(zhuǎn)換List集合。

@Test
public void testListToJson()
{
    // 先準(zhǔn)備一個(gè)List集合
    List<Person> list = new ArrayList<Person>();
    list.add(new Person("三笠·阿克曼", 16, false, Arrays.asList("砍巨人", "保護(hù)艾倫")));
    list.add(new Person("阿明·阿諾德", 16, true, Arrays.asList("看書(shū)", "玩海螺")));
    System.out.println(list);
    // 創(chuàng)建Gson實(shí)例
    Gson gson = new Gson();
    // 調(diào)用Gson的toJson方法
    String listJson = gson.toJson(list);
    System.out.println(listJson);
    // [{"name":"三笠·阿克曼","age":16,"isMale":false,"hobbies":["砍巨人","保護(hù)艾倫"]},{"name":"阿明·阿諾德","age":16,"isMale":true,"hobbies":["看書(shū)","玩海螺"]}]
}

Json轉(zhuǎn)List對(duì)象

由于List接口帶泛型,如果還調(diào)用 t fromJson(String, Class)方法,那么返回的雖然還是個(gè)List集合,但是集合里面的數(shù)據(jù)卻不是Person對(duì)象,而是Map對(duì)象,并將Person屬性以鍵值對(duì)的形式存放在Map的實(shí)例中。讓我們來(lái)驗(yàn)證一下。

......// 此處延續(xù)以上代碼
List fromJson = gson.fromJson(listJson, List.class);
System.out.println(fromJson.get(0).getClass());
// class com.google.gson.internal.LinkedTreeMap

要想獲取的List還和之前的一毛一樣,那么我們需要調(diào)用Gson的 T fromJson(String, Type) 方法。如下:

此方法參數(shù)中的Type類型可以通過(guò)Gson包提供TypeToken<>類獲取。這個(gè)類帶有泛型,且這個(gè)泛型就是Json串轉(zhuǎn)換成為對(duì)象后的類型(此處是List)我們不需要重寫這個(gè)類中的任何方法,只需要?jiǎng)?chuàng)建這個(gè)類的一個(gè)匿名內(nèi)部類并調(diào)用getTpye()方法即可。

注意:一定要將這個(gè)匿名內(nèi)部類的泛型寫為Json字符串解析后生成的對(duì)象類型。

......// 此處延續(xù)以上代碼
// 調(diào)用Gson的 T fromJson(String, Type)將List集合的json串反序列化為L(zhǎng)ist對(duì)象
List<Person> plist = gson.fromJson(listJson, new TypeToken<List<Person>>(){}.getType());
System.out.println(plist);
// [Person{name='三笠·阿克曼', age=16, isMale=false, hobbies=[砍巨人, 保護(hù)艾倫]}, Person{name='阿明·阿諾德', age=16, isMale=true, hobbies=[看書(shū), 玩海螺]}]

使用場(chǎng)景三:轉(zhuǎn)換Map集合。

轉(zhuǎn)換Map的步驟就和轉(zhuǎn)換List的步驟一模一樣了,代碼如下。詳解請(qǐng)看List轉(zhuǎn)換。

@Test
public void testMapToJson()
{
? ? Map<String, Person> map = new HashMap<>();
? ? map.put("p1", new Person("利威爾·阿克曼", 35, true, Arrays.asList("砍猴兒", "打掃衛(wèi)生")));
? ? map.put("p2", new Person("韓吉·佐耶", 33, false, Arrays.asList("研究巨人", "講故事")));

? ? Gson gson = new Gson();
? ? String mapJson = gson.toJson(map);

? ? System.out.println(mapJson);
? ? // {"p1":{"name":"利威爾·阿克曼","age":35,"isMale":true,"hobbies":["砍猴兒","打掃衛(wèi)生"]},"p2":{"name":"韓吉·佐耶","age":33,"isMale":false,"hobbies":["研究巨人","講故事"]}}
? ? Map<String, Person> jsonMap = gson.fromJson(mapJson, new TypeToken<Map<String, Person>>() { }.getType());
? ? System.out.println(jsonMap);
}

總的來(lái)說(shuō)就是toJson()和fromJson兩個(gè)方法

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

相關(guān)文章

  • java如何使用ftp下載遠(yuǎn)程服務(wù)器文件

    java如何使用ftp下載遠(yuǎn)程服務(wù)器文件

    Java通過(guò)FTP下載文件主要有兩種方式:第一種是直接在連接中包含賬號(hào)和密碼進(jìn)行遠(yuǎn)程下載;第二種是登錄后使用賬號(hào)和密碼進(jìn)行下載,這些方法適用于需要從遠(yuǎn)程服務(wù)器獲取文件的場(chǎng)景
    2024-11-11
  • Mybatis 簡(jiǎn)單啟動(dòng)過(guò)程入門詳解

    Mybatis 簡(jiǎn)單啟動(dòng)過(guò)程入門詳解

    MyBatis是一個(gè)持久層框架,簡(jiǎn)化JDBC操作,SpringBoot集成MyBatis,通過(guò)創(chuàng)建項(xiàng)目、準(zhǔn)備數(shù)據(jù)、配置文件、實(shí)體類和接口,可以實(shí)現(xiàn)數(shù)據(jù)庫(kù)操作,使用@Mapper和@Select注解簡(jiǎn)化接口實(shí)現(xiàn),測(cè)試類使用@SpringBootTest和@Test注解啟動(dòng),本文介紹Mybatis啟動(dòng)過(guò)程,感興趣的朋友一起看看吧
    2025-03-03
  • MyBatisPlus數(shù)據(jù)權(quán)限控制實(shí)現(xiàn)的三種方式

    MyBatisPlus數(shù)據(jù)權(quán)限控制實(shí)現(xiàn)的三種方式

    數(shù)據(jù)權(quán)限是保障數(shù)據(jù)安全的重要手段,本文主要介紹了MyBatisPlus數(shù)據(jù)權(quán)限控制實(shí)現(xiàn)的三種方式,具有一定的參考價(jià)值,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-05-05
  • 詳解spring-boot集成elasticsearch及其簡(jiǎn)單應(yīng)用

    詳解spring-boot集成elasticsearch及其簡(jiǎn)單應(yīng)用

    本篇文章主要介紹了詳解spring-boot集成elasticsearch及其簡(jiǎn)單應(yīng)用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • IDEA報(bào)錯(cuò)"Cannot?resolve?symbol"問(wèn)題的解決辦法

    IDEA報(bào)錯(cuò)"Cannot?resolve?symbol"問(wèn)題的解決辦法

    早上來(lái)了,打開(kāi)idea發(fā)現(xiàn)注解等都變紅報(bào)錯(cuò)can’t resolvesymbol,由于這個(gè)錯(cuò)之前也報(bào)過(guò),所以記錄一下,這篇文章主要給大家介紹了關(guān)于IDEA報(bào)錯(cuò)"Cannot?resolve?symbol"問(wèn)題的解決辦法,需要的朋友可以參考下
    2023-11-11
  • SpringBoot集成SpringSecurity和JWT做登陸鑒權(quán)的實(shí)現(xiàn)

    SpringBoot集成SpringSecurity和JWT做登陸鑒權(quán)的實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot集成SpringSecurity和JWT做登陸鑒權(quán)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Java對(duì)象以Hash結(jié)構(gòu)存入Redis詳解

    Java對(duì)象以Hash結(jié)構(gòu)存入Redis詳解

    這篇文章主要介紹了Java對(duì)象以Hash結(jié)構(gòu)存入Redis詳解,和Java中的對(duì)象非常相似,卻不能按照J(rèn)ava對(duì)象的結(jié)構(gòu)直接存儲(chǔ)進(jìn)Redis的hash中,因?yàn)镴ava對(duì)象中的field是可以嵌套的,而Redis的Hash結(jié)構(gòu)不支持嵌套結(jié)構(gòu),需要的朋友可以參考下
    2023-08-08
  • JAVA 內(nèi)存溢出案例匯總

    JAVA 內(nèi)存溢出案例匯總

    這篇文章主要介紹了JAVA 內(nèi)存溢出案例的匯總,文中講解非常細(xì)致,幫助各位工作學(xué)習(xí)時(shí)避免內(nèi)存溢出,感興趣的朋友可以了解下
    2020-07-07
  • Java中兩個(gè)大數(shù)之間的相關(guān)運(yùn)算及BigInteger代碼示例

    Java中兩個(gè)大數(shù)之間的相關(guān)運(yùn)算及BigInteger代碼示例

    這篇文章主要介紹了Java中兩個(gè)大數(shù)之間的相關(guān)運(yùn)算及BigInteger代碼示例,通過(guò)biginteger類實(shí)現(xiàn)大數(shù)的運(yùn)算代碼,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • @PostConstruct在項(xiàng)目啟動(dòng)時(shí)被執(zhí)行兩次或多次的原因及分析

    @PostConstruct在項(xiàng)目啟動(dòng)時(shí)被執(zhí)行兩次或多次的原因及分析

    這篇文章主要介紹了@PostConstruct在項(xiàng)目啟動(dòng)時(shí)被執(zhí)行兩次或多次的原因及分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08

最新評(píng)論

丹巴县| 抚顺市| 浙江省| 闵行区| 海原县| 滕州市| 无棣县| 泸定县| 永胜县| 井陉县| 新昌县| 永清县| 阳城县| 武义县| 广西| 洱源县| 丁青县| 黄梅县| 昌黎县| 孟村| 隆昌县| 卢氏县| 澎湖县| 凌云县| 彰化县| 濮阳县| 东源县| 阳城县| 鄂托克旗| 太仓市| 壤塘县| 北川| 县级市| 武安市| 乌拉特前旗| 花莲县| 东城区| 陈巴尔虎旗| 安远县| 景泰县| 牡丹江市|