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

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

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

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

下面我們來看看如何使用

第一步:導入依賴

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

第二步:開始使用

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

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

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

?? ?// 省略構造器和getter/setter方法,注意重寫toString方法,便于查看控制臺輸出。

? ? @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的實例。

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

@Test
public void testBeanToJson()
{
? ? // 創(chuàng)建Bean
? ? Person p = new Person("艾倫·耶格爾", 16, true, Arrays.asList("自由", "迫害萊納"));
? ? // 創(chuàng)建Gson對象
? ? 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實例的json字符串轉(zhuǎn)換為Person對象。

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

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

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

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

Json轉(zhuǎn)List對象

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

......// 此處延續(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類型可以通過Gson包提供TypeToken<>類獲取。這個類帶有泛型,且這個泛型就是Json串轉(zhuǎn)換成為對象后的類型(此處是List)我們不需要重寫這個類中的任何方法,只需要創(chuàng)建這個類的一個匿名內(nèi)部類并調(diào)用getTpye()方法即可。

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

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

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

轉(zhuǎn)換Map的步驟就和轉(zhuǎn)換List的步驟一模一樣了,代碼如下。詳解請看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);
}

總的來說就是toJson()和fromJson兩個方法

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

相關文章

  • java必學必會之線程(1)

    java必學必會之線程(1)

    java必學必會之線程第一篇,介紹了線程的基本概念、線程的創(chuàng)建和啟動,想要學好java線程的朋友一定要好好閱讀這篇文章
    2015-12-12
  • 獲取Spring的上下文環(huán)境ApplicationContext的最簡單方式

    獲取Spring的上下文環(huán)境ApplicationContext的最簡單方式

    這篇文章主要介紹了獲取Spring的上下文環(huán)境ApplicationContext的最簡單方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 設計模式之中介者模式_動力節(jié)點Java學院整理

    設計模式之中介者模式_動力節(jié)點Java學院整理

    這篇文章主要為大家詳細介紹了設計模式之中介者模式的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Springboot中登錄后關于cookie和session攔截問題的案例分析

    Springboot中登錄后關于cookie和session攔截問題的案例分析

    這篇文章主要介紹了Springboot中登錄后關于cookie和session攔截案例,本文通過實例圖文相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • Spring MVC返回的json去除根節(jié)點名稱的方法

    Spring MVC返回的json去除根節(jié)點名稱的方法

    這篇文章主要介紹了Spring MVC返回的json去除根節(jié)點名稱的方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-09-09
  • java8 stream多字段排序的實現(xiàn)

    java8 stream多字段排序的實現(xiàn)

    這篇文章主要介紹了java8 stream多字段排序的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • SpringBoot?動態(tài)加載?Jar?包實現(xiàn)靈活的動態(tài)配置完美方案

    SpringBoot?動態(tài)加載?Jar?包實現(xiàn)靈活的動態(tài)配置完美方案

    SpringBoot作為一個開發(fā)快速、部署方便的微服務框架,具有自動配置、約定優(yōu)于配置的特點,能夠極大地提高開發(fā)效率,它提供了豐富的擴展點,非常適合實現(xiàn)動態(tài)加載Jar包的功能,本文將深入探討如何在SpringBoot應用中實現(xiàn)動態(tài)加載Jar包的方案,感興趣的朋友一起看看吧
    2024-04-04
  • Java對象不使用時賦值null的意義詳解

    Java對象不使用時賦值null的意義詳解

    這篇文章主要介紹了java對象不再使用時賦值null的意義,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • java實現(xiàn)打印日歷

    java實現(xiàn)打印日歷

    這篇文章主要為大家詳細介紹了java打印日歷的實現(xiàn)代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • Springboot項目打包如何將依賴的jar包輸出到指定目錄

    Springboot項目打包如何將依賴的jar包輸出到指定目錄

    公司要對springboot項目依賴的jar包進行升級,但是遇到一個問題,項目打包之后,沒辦法看到他里面依賴的jar包,版本到底是不是升上去了,沒辦法看到,下面通過本文給大家分享Springboot項目打包如何將依賴的jar包輸出到指定目錄,感興趣的朋友一起看看吧
    2024-05-05

最新評論