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

Java中JSON字符串進(jìn)行各種轉(zhuǎn)換的方法小結(jié)

 更新時(shí)間:2024年01月28日 10:11:59   作者:不歸SUN  
Gson和Hutool的JSONUtil都是常用的用于處理JSON數(shù)據(jù)的工具庫(kù),它們提供了簡(jiǎn)單易用的API來(lái)進(jìn)行JSON字符串的解析、轉(zhuǎn)換和操作,下面就跟隨小編一起學(xué)習(xí)一下如果使用他們實(shí)現(xiàn)JSON字符串的各種轉(zhuǎn)換吧

Gson和Hutool的JSONUtil都是常用的用于處理JSON數(shù)據(jù)的工具庫(kù),它們提供了簡(jiǎn)單易用的API來(lái)進(jìn)行JSON字符串的解析、轉(zhuǎn)換和操作。下面對(duì)它們進(jìn)行一些比較:

  • 功能豐富程度: Gson相對(duì)來(lái)說(shuō)是一個(gè)更全面的JSON處理庫(kù),提供了更多的功能和選項(xiàng),例如支持自定義序列化和反序列化規(guī)則、處理復(fù)雜對(duì)象等。而Hutool的JSONUtil則是Hutool工具庫(kù)中的一部分,相對(duì)較為簡(jiǎn)潔,提供了一些基本的JSON操作方法。
  • 使用方式: Gson使用起來(lái)比較簡(jiǎn)單明了,只需創(chuàng)建Gson對(duì)象,并通過(guò)其提供的方法進(jìn)行序列化和反序列化操作。而Hutool的JSONUtil也非常易用,可以直接調(diào)用其提供的方法進(jìn)行JSON字符串的解析、轉(zhuǎn)換和操作。
  • 性能: 在性能方面,Gson通常比Hutool的JSONUtil稍微快一些。這是由于Gson在內(nèi)部使用了很多高級(jí)的技術(shù)和優(yōu)化策略來(lái)提高效率,但在大多數(shù)情況下,性能差異并不會(huì)對(duì)應(yīng)用程序產(chǎn)生顯著影響。
  • 依賴和引入: Gson是Google開(kāi)發(fā)的庫(kù),需要單獨(dú)引入Gson的依賴包。而Hutool是一個(gè)Java工具庫(kù),JSONUtil是其中的一個(gè)模塊,可以通過(guò)引入整個(gè)Hutool工具庫(kù)來(lái)使用。

在使用選擇方面,如果你需要更多高級(jí)的JSON操作和自定義功能,或者對(duì)性能有較高要求,那么可以選擇使用Gson。而如果你只需要進(jìn)行一些基本的JSON解析、轉(zhuǎn)換和操作,并且希望使用一個(gè)輕量級(jí)的工具庫(kù),那么Hutool的JSONUtil是一個(gè)很好的選擇。最終選擇取決于你的具體需求和偏好。

1.GSON解析器

Gson 是一個(gè)開(kāi)源的 Java 庫(kù),用于在 Java 對(duì)象和 JSON 數(shù)據(jù)之間進(jìn)行序列化和反序列化操作。它可以將 Java 對(duì)象轉(zhuǎn)換為 JSON 字符串,并將 JSON 字符串轉(zhuǎn)換為 Java 對(duì)象。 可以將字符串轉(zhuǎn)換為復(fù)雜的bean,

導(dǎo)入依賴

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

準(zhǔn)備需要轉(zhuǎn)換成的實(shí)體類

@Data  
public class User{  
private Integer id;  
private String name;  
private String sex;
}

1.字符串轉(zhuǎn)javaBean對(duì)象

String str="{\"id\":1,\"name\":\"Lily\",\"sex\":\"女\"}";  
Gson gson = new Gson();  
User user = gson.fromJson(str, User.class);

使用 gson.fromJson() 方法將 JSON 字符串 str 轉(zhuǎn)換為 User 對(duì)象,并將結(jié)果存儲(chǔ)在 user 變量中。

注意,User 類需要與 JSON 字符串中的鍵值對(duì)對(duì)應(yīng),即 name 屬性對(duì)應(yīng) JSON 中的 "name" 鍵,age 屬性對(duì)應(yīng) JSON 中的 "age" 鍵。

2.字符串轉(zhuǎn)List

String strList="[{\"id\":1,\"name\":\"Lily\",\"sex\":\"女\"},{\"id\":2,\"name\":\"Bob\",\"sex\":\"男\(zhòng)"}]";  
Gson gson = new Gson(); 
List<User> users = gson.fromJson(strList, new TypeToken<List<User>>() {  
}.getType());

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

注意:需要轉(zhuǎn)換的字符串strList,必須是list格式,以"["開(kāi)頭,"]"結(jié)尾。不然會(huì)報(bào)錯(cuò):com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 1 path $

3.字符串轉(zhuǎn)map

與轉(zhuǎn)換為L(zhǎng)ist步驟一樣,注意:字符串需以"{"開(kāi)頭。

String strList="{\"id\":1,\"name\":\"Lily\",\"sex\":\"女\"}";  
Gson gson = new Gson(); 
Map<String, Person> jsonMap = gson.fromJson(mapJson, new TypeToken<Map<String, Person>>() { }.getType());

4.Object轉(zhuǎn)換為JSON字符串

String json = gson.toJson(Object);

使用 gson.toJson() 方法將 各種Java 對(duì)象轉(zhuǎn)換成相應(yīng)的 JSON 字符串。

2.JSONUtil解析

JSONUtil 是 Hutool 中用于處理 JSON 數(shù)據(jù)的工具類。

導(dǎo)入依賴

<dependency> 
<groupId>cn.hutool</groupId> <artifactId>hutool-json</artifactId> 
<version>5.7.6</version> </dependency>

1.Object轉(zhuǎn)換為JSON字符串

JSONUtil.toJsonStr可以將任意對(duì)象(Bean、Map、集合等)直接轉(zhuǎn)換為JSON字符串。 如果對(duì)象是有序的Map等對(duì)象,則轉(zhuǎn)換后的JSON字符串也是有序的。

String jsonStr = JSONUtil.toJsonStr(Object);

2.JSON字符串轉(zhuǎn)換為map

首先使用 JSONUtil.parseObj() 方法將 JSON 字符串解析為一個(gè) JSONObject 對(duì)象,然后使用 toBean() 方法將 JSONObject 對(duì)象轉(zhuǎn)換為 HashMap 類型的 Java 對(duì)象。

String str="{\"id\":1,\"name\":\"Lily\",\"sex\":\"女\"}";
JSONObject jsonObject = JSONUtil.parseObj(str);  
HashMap map = jsonObject.toBean(HashMap.class);

3.JSON字符串轉(zhuǎn)換為L(zhǎng)ist

1.使用 JSONArray.parseArray() 方法將 JSON 字符串轉(zhuǎn)換為 JSONArray 對(duì)象; 使用 JSONArray.toList() 方法將 JSONArray 對(duì)象轉(zhuǎn)換為 List 對(duì)象

String jsonString = "[{\"id\": 1, \"name\": \"Alice\"}, {\"id\": 2, \"name\": \"Bob\"}]";
JSONArray jsonArray = JSONUtil.parseArray(jsonString);
List<Map<String, Object>> list = CollectionUtil.toList(jsonArray, Map.class);

2.JSONUtil.toList()方法需要傳入兩個(gè)參數(shù):一個(gè)JsonArray,一個(gè)要轉(zhuǎn)換的類型,這里new一個(gè)JsonArray

JSONArray jsonArray = new JSONArray(jsonList); 
List<Map> mapList = JSONUtil.toList(jsonArray, Map.class);

3.總結(jié)

1.GSON

Object轉(zhuǎn)換為json字符串:gson.toJson(Object)

json字符串轉(zhuǎn)Object: gson.fromJson(strList, new TypeToken<>() { }.getType());

2.JSONUtil

Object轉(zhuǎn)換為json字符串:JSONUtil.toJsonStr(Object)

json字符串轉(zhuǎn)map:

HashMap<String,Integer> hashMap = JSONUtil.parseObj(jsonMap).toBean(HashMap.class);

json字符串轉(zhuǎn)list:

JSONArray jsonArray = new JSONArray(objListJson); List users = JSONUtil.toList(jsonArray, User.class);

或者:

JSONArray jsonArray = JSONUtil.parseArray(jsonString); List list = CollectionUtil.toList(jsonArray, User.class);

以上就是Java中JSON字符串進(jìn)行各種轉(zhuǎn)換的方法小結(jié)的詳細(xì)內(nèi)容,更多關(guān)于Java JSON字符串轉(zhuǎn)換的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 關(guān)于IO密集型服務(wù)提升性能的三種方式

    關(guān)于IO密集型服務(wù)提升性能的三種方式

    這篇文章主要介紹了關(guān)于IO密集型服務(wù)提升性能的三種方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Java 入門(mén)圖形用戶界面設(shè)計(jì)之單選按鈕

    Java 入門(mén)圖形用戶界面設(shè)計(jì)之單選按鈕

    圖形界面(簡(jiǎn)稱GUI)是指采用圖形方式顯示的計(jì)算機(jī)操作用戶界面。與早期計(jì)算機(jī)使用的命令行界面相比,圖形界面對(duì)于用戶來(lái)說(shuō)在視覺(jué)上更易于接受,本篇精講Java語(yǔ)言中關(guān)于圖形用戶界面的單選按鈕
    2022-02-02
  • java+mysql實(shí)現(xiàn)登錄和注冊(cè)功能

    java+mysql實(shí)現(xiàn)登錄和注冊(cè)功能

    這篇文章主要為大家詳細(xì)介紹了java+mysql實(shí)現(xiàn)登錄和注冊(cè)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 詳解springboot啟動(dòng)時(shí)是如何加載配置文件application.yml文件

    詳解springboot啟動(dòng)時(shí)是如何加載配置文件application.yml文件

    這篇文章主要介紹了詳解springboot啟動(dòng)時(shí)是如何加載配置文件application.yml文件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • SpringBoot基于Redis的分布式鎖實(shí)現(xiàn)過(guò)程記錄

    SpringBoot基于Redis的分布式鎖實(shí)現(xiàn)過(guò)程記錄

    Redis是一套 key-value 高性能數(shù)據(jù)庫(kù),使用它可以大大提高我們的開(kāi)發(fā)效率,在SpringBoot中,自動(dòng)配置也幫我們節(jié)約了大量的配置,下面這篇文章主要給大家介紹了關(guān)于SpringBoot基于Redis的分布式鎖實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • Springboot關(guān)于自定義stater的yml無(wú)法提示問(wèn)題解決方案

    Springboot關(guān)于自定義stater的yml無(wú)法提示問(wèn)題解決方案

    這篇文章主要介紹了Springboot關(guān)于自定義stater的yml無(wú)法提示問(wèn)題及解決方案,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • springboot實(shí)現(xiàn)發(fā)送郵件(QQ郵箱為例)

    springboot實(shí)現(xiàn)發(fā)送郵件(QQ郵箱為例)

    這篇文章主要為大家詳細(xì)介紹了springboot實(shí)現(xiàn)發(fā)送郵件,qq郵箱代碼實(shí)現(xiàn)郵件發(fā)送,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • 超詳細(xì)介紹idea中java程序打jar包的兩種方式

    超詳細(xì)介紹idea中java程序打jar包的兩種方式

    這篇文章主要介紹了超詳細(xì)介紹idea中java程序打jar包的兩種方式一種是可直接執(zhí)行的runnable jar文件,另一種是包含多個(gè)主類,運(yùn)行時(shí)需要指定主類全類名的jar包,感興趣的可以了解一下
    2020-07-07
  • 解決Java執(zhí)行Cmd命令出現(xiàn)的死鎖問(wèn)題

    解決Java執(zhí)行Cmd命令出現(xiàn)的死鎖問(wèn)題

    這篇文章主要介紹了關(guān)于Java執(zhí)行Cmd命令出現(xiàn)的死鎖問(wèn)題解決,解決方法就是在waitfor()方法之前讀出窗口的標(biāo)準(zhǔn)輸出、輸出、錯(cuò)誤緩沖區(qū)中的內(nèi)容,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • 詳解Java中的內(nèi)存屏障

    詳解Java中的內(nèi)存屏障

    這篇文章主要介紹了Java中的內(nèi)存屏障的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-05-05

最新評(píng)論