Java中JSON字符串進行各種轉(zhuǎn)換的方法小結(jié)
Gson和Hutool的JSONUtil都是常用的用于處理JSON數(shù)據(jù)的工具庫,它們提供了簡單易用的API來進行JSON字符串的解析、轉(zhuǎn)換和操作。下面對它們進行一些比較:
- 功能豐富程度: Gson相對來說是一個更全面的JSON處理庫,提供了更多的功能和選項,例如支持自定義序列化和反序列化規(guī)則、處理復雜對象等。而Hutool的JSONUtil則是Hutool工具庫中的一部分,相對較為簡潔,提供了一些基本的JSON操作方法。
- 使用方式: Gson使用起來比較簡單明了,只需創(chuàng)建Gson對象,并通過其提供的方法進行序列化和反序列化操作。而Hutool的JSONUtil也非常易用,可以直接調(diào)用其提供的方法進行JSON字符串的解析、轉(zhuǎn)換和操作。
- 性能: 在性能方面,Gson通常比Hutool的JSONUtil稍微快一些。這是由于Gson在內(nèi)部使用了很多高級的技術(shù)和優(yōu)化策略來提高效率,但在大多數(shù)情況下,性能差異并不會對應用程序產(chǎn)生顯著影響。
- 依賴和引入: Gson是Google開發(fā)的庫,需要單獨引入Gson的依賴包。而Hutool是一個Java工具庫,JSONUtil是其中的一個模塊,可以通過引入整個Hutool工具庫來使用。
在使用選擇方面,如果你需要更多高級的JSON操作和自定義功能,或者對性能有較高要求,那么可以選擇使用Gson。而如果你只需要進行一些基本的JSON解析、轉(zhuǎn)換和操作,并且希望使用一個輕量級的工具庫,那么Hutool的JSONUtil是一個很好的選擇。最終選擇取決于你的具體需求和偏好。
1.GSON解析器
Gson 是一個開源的 Java 庫,用于在 Java 對象和 JSON 數(shù)據(jù)之間進行序列化和反序列化操作。它可以將 Java 對象轉(zhuǎn)換為 JSON 字符串,并將 JSON 字符串轉(zhuǎn)換為 Java 對象。 可以將字符串轉(zhuǎn)換為復雜的bean,
導入依賴
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.6</version> </dependency>
準備需要轉(zhuǎn)換成的實體類
@Data public class User{ private Integer id; private String name; private String sex; }
1.字符串轉(zhuǎn)javaBean對象
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 對象,并將結(jié)果存儲在 user
變量中。
注意,User
類需要與 JSON 字符串中的鍵值對對應,即 name
屬性對應 JSON 中的 "name"
鍵,age
屬性對應 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類型可以通過Gson包提供TypeToken<>類獲取。這個類帶有泛型,且這個泛型就是Json串轉(zhuǎn)換成為對象后的類型(此處是List<User>)我們不需要重寫這個類中的任何方法,只需要創(chuàng)建這個類的一個匿名內(nèi)部類并調(diào)用getTpye()方法即可。
注意:需要轉(zhuǎn)換的字符串strList,必須是list格式,以"["開頭,"]"結(jié)尾。不然會報錯: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)換為List步驟一樣,注意:字符串需以"{"開頭。
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 對象轉(zhuǎn)換成相應的 JSON 字符串。
2.JSONUtil解析
JSONUtil 是 Hutool 中用于處理 JSON 數(shù)據(jù)的工具類。
導入依賴
<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-json</artifactId> <version>5.7.6</version> </dependency>
1.Object轉(zhuǎn)換為JSON字符串
JSONUtil.toJsonStr可以將任意對象(Bean、Map、集合等)直接轉(zhuǎn)換為JSON字符串。 如果對象是有序的Map等對象,則轉(zhuǎn)換后的JSON字符串也是有序的。
String jsonStr = JSONUtil.toJsonStr(Object);
2.JSON字符串轉(zhuǎn)換為map
首先使用 JSONUtil.parseObj()
方法將 JSON 字符串解析為一個 JSONObject 對象,然后使用 toBean()
方法將 JSONObject 對象轉(zhuǎn)換為 HashMap 類型的 Java 對象。
String str="{\"id\":1,\"name\":\"Lily\",\"sex\":\"女\"}"; JSONObject jsonObject = JSONUtil.parseObj(str); HashMap map = jsonObject.toBean(HashMap.class);
3.JSON字符串轉(zhuǎn)換為List
1.使用 JSONArray.parseArray() 方法將 JSON 字符串轉(zhuǎn)換為 JSONArray 對象; 使用 JSONArray.toList() 方法將 JSONArray 對象轉(zhuǎn)換為 List 對象
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()
方法需要傳入兩個參數(shù):一個JsonArray,一個要轉(zhuǎn)換的類型,這里new一個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字符串進行各種轉(zhuǎn)換的方法小結(jié)的詳細內(nèi)容,更多關(guān)于Java JSON字符串轉(zhuǎn)換的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解springboot啟動時是如何加載配置文件application.yml文件
這篇文章主要介紹了詳解springboot啟動時是如何加載配置文件application.yml文件,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-06-06SpringBoot基于Redis的分布式鎖實現(xiàn)過程記錄
Redis是一套 key-value 高性能數(shù)據(jù)庫,使用它可以大大提高我們的開發(fā)效率,在SpringBoot中,自動配置也幫我們節(jié)約了大量的配置,下面這篇文章主要給大家介紹了關(guān)于SpringBoot基于Redis的分布式鎖實現(xiàn)的相關(guān)資料,需要的朋友可以參考下2022-01-01Springboot關(guān)于自定義stater的yml無法提示問題解決方案
這篇文章主要介紹了Springboot關(guān)于自定義stater的yml無法提示問題及解決方案,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-06-06springboot實現(xiàn)發(fā)送郵件(QQ郵箱為例)
這篇文章主要為大家詳細介紹了springboot實現(xiàn)發(fā)送郵件,qq郵箱代碼實現(xiàn)郵件發(fā)送,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-06-06解決Java執(zhí)行Cmd命令出現(xiàn)的死鎖問題
這篇文章主要介紹了關(guān)于Java執(zhí)行Cmd命令出現(xiàn)的死鎖問題解決,解決方法就是在waitfor()方法之前讀出窗口的標準輸出、輸出、錯誤緩沖區(qū)中的內(nèi)容,本文給大家介紹的非常詳細,需要的朋友可以參考下2022-07-07