使用Gson將字符串轉(zhuǎn)換成JsonObject和JsonArray
Gson將字符串轉(zhuǎn)JsonObject和JsonArray
以下均利用Gson來處理
1.將bean轉(zhuǎn)換成Json字符串:
public static String beanToJSONString(Object bean) { ?? ??? ?return new Gson().toJson(bean); ?? ?}
2.將Json字符串轉(zhuǎn)換成對象:
public static Object JSONToObject(String json,Class beanClass) { ?? ??? ?Gson gson = new Gson(); ?? ??? ?Object res = gson.fromJson(json, beanClass); ?? ??? ?return res; ?? ?}
注:轉(zhuǎn)換后的對象使用前進(jìn)行強(qiáng)轉(zhuǎn):例如bean bean1 = (bean)FormatUtil.JSONToObject(json, bean.class);
3.將Json字符串轉(zhuǎn)換成JsonObject對象:
JsonObject returnData = new JsonParser().parse(jsonstr).getAsJsonObject();
4.將JsonArray類型的Json字符串解析成對象方法
? ? Gson gson = new Gson();? ? ? JsonParser parser = new JsonParser();? ? ? JsonArray Jarray = parser.parse(jstring).getAsJsonArray();? ? ? ? ArrayList<channelSearchEnum> lcs = new ArrayList<channelSearchEnum>();? ? ? ? for(JsonElement obj : Jarray ){? ? ? ? ? channelSearchEnum cse = gson.fromJson( obj , channelSearchEnum.class);? ? ? ? ? lcs.add(cse);? ? ? }
或者
String json = "[{\"username\":\"test\"},{\"username\":\"test2\"}]";? System.out.println(new JsonParser().parse(json).getAsJsonArray().get(0).getAsJsonObject().get("username").getAsString());
5.獲取JsonObject中指定key值對應(yīng)的JsonArray對象:
String json= "{\"pids\":[\"1\",\"2\",\"3\"]}"; System.out.println(new JsonParser().parse(json).getAsJsonObject().getAsJsonArray("pids").get(0).getAsString());
JSONObject與JSON互轉(zhuǎn)
使用目的
目前數(shù)據(jù)交互大多以 JSON 字符串為信息傳輸,主要格式有
{"age":"22","name":"李四"}
[{"age":"21","name":"張三"}]
最常見的應(yīng)用場景是前后端對接,第三方平臺文檔對接,下面展示轉(zhuǎn)換使用。
引入 jar , 此處引入 com.alibaba.fastjson 版本的jar包
? ? ? ? <dependency> ?? ??? ??? ?<groupId>com.alibaba</groupId> ?? ??? ??? ?<artifactId>fastjson</artifactId> ?? ??? ??? ?<version>1.1.31</version> ?? ??? ?</dependency>
建立測試類對象
class Student { ?? ?private String name; ?? ?private String age; ? ?? ?public String getName() { ?? ??? ?return name; ?? ?} ? ?? ?public void setName(String name) { ?? ??? ?this.name = name; ?? ?} ? ?? ?public String getAge() { ?? ??? ?return age; ?? ?} ? ?? ?public void setAge(String age) { ?? ??? ?this.age = age; ?? ?}? }
轉(zhuǎn)換
1、對象 轉(zhuǎn) JSON
? ? ? ? Student stu1 = new Student(); ?? ??? ?stu1.setName("張三"); ?? ??? ?stu1.setAge("21"); ?? ??? ?String stu1Json = JSONObject.toJSONString(stu1);
輸出:
{"age":"21","name":"張三"}
2、JSON 轉(zhuǎn) 對象
? ? ? ? Student stu1to = JSON.parseObject(stu1Json, Student.class); ?? ??? ?System.out.println("json 轉(zhuǎn)對象:"); ?? ??? ?System.out.println(stu1to); ?? ??? ?System.out.println(stu1to.getName()); ?? ??? ?System.out.println(stu1to.getAge());
輸出:
json 轉(zhuǎn)對象:
Student@2aae9190
張三
21
注:JSON鍵名要與對象屬性名相對應(yīng)
3、對象數(shù)組 轉(zhuǎn) JSON
? ? ? ? Student stu2 = new Student(); ?? ??? ?stu2.setName("李四"); ?? ??? ?stu2.setAge("22"); ?? ??? ?List<Student> list = new ArrayList<Student>(); ?? ??? ?list.add(stu1); ?? ??? ?list.add(stu2); ? ?? ??? ?String listJson = JSONObject.toJSONString(list); ?? ??? ?System.out.println(listJson);
輸出:
[{"age":"21","name":"張三"},{"age":"22","name":"李四"}]
4、JSON 轉(zhuǎn) 對象數(shù)組
? ? ? ? List<Student> studentList = JSON.parseArray(listJson, Student.class); ?? ??? ?for (Student student : studentList) { ?? ??? ??? ?System.out.println(student.getName()); ?? ??? ?}
輸出:
json 數(shù)組格式轉(zhuǎn)換對象
張三
李四
5、JSON多級組合,適用于請求文檔傳輸參數(shù)
? ? ? ? JSONObject jsona = new JSONObject(); ?? ??? ?jsona.put("number", "1"); ?? ??? ?JSONObject jsonb = new JSONObject(); ?? ??? ?jsonb.put("listMap", list); ? ?? ??? ?JSONObject jsonAll = new JSONObject(); ?? ??? ?jsonAll.put("jsona", jsona); ?? ??? ?jsonAll.put("jsonb", jsonb); ?? ??? ?String jsonAllStr =JSONObject.toJSONString(jsonAll); ?? ??? ?System.out.println(jsonAllStr);
輸出:
{"jsona":{"number":"1"},"jsonb":{"listMap":[{"age":"21","name":"張三"},{"age":"22","name":"李四"}]}}
6、多級 JSON 組合
6.1、只獲取指定字段,接上方示例代碼
String getJsona = JSON.parseObject(jsonAllStr).getString("jsona"); String strjsona = JSON.parseObject(getJsona, String.class); //指定獲取 字段名對象信息,如果為單個(gè)String可不指定,這里作為實(shí)例寫出 System.out.println("只拿jsona信息"); System.out.println(strjsona);
輸出:
只拿jsona信息
{"number":"1"}
6.2、獲取指定字段對象
? ? String getJsonb = JSON.parseObject(jsonAllStr).getString("jsonb"); ?? ?String getJsonbb = JSON.parseObject(getJsonb).getString("listMap"); ? ?//這里被二級包裹,所以要獲取2次才能轉(zhuǎn)換對象數(shù)組 ?? ?List<Student> strjsonb = JSON.parseArray(getJsonbb, Student.class); ?? ?System.out.println("只拿jsonbb信息"); ?? ?System.out.println(strjsonb);
輸出:
只拿jsonbb信息
[Student@3d04a311, Student@7a46a697]
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
JAVA新手小白學(xué)正則表達(dá)式、包裝類、自動(dòng)裝箱/自動(dòng)拆箱以及BigDecimal
這篇文章主要給大家介紹了關(guān)于JAVA新手小白學(xué)正則表達(dá)式、包裝類、自動(dòng)裝箱/自動(dòng)拆箱以及BigDecimal的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-03-03SpringBoot連接MYSQL數(shù)據(jù)庫并使用JPA進(jìn)行操作
今天給大家介紹一下如何SpringBoot中連接Mysql數(shù)據(jù)庫,并使用JPA進(jìn)行數(shù)據(jù)庫的相關(guān)操作。2017-04-04關(guān)于Poi讀取Excel引發(fā)內(nèi)存溢出問題的解決方法
這篇文章主要給大家介紹了關(guān)于Poi讀取Excel引發(fā)內(nèi)存溢出問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-08-08使用Maven 搭建 Spring MVC 本地部署Tomcat的詳細(xì)教程
這篇文章主要介紹了使用Maven 搭建 Spring MVC 本地部署Tomcat,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08Java MultipartFile實(shí)現(xiàn)上傳文件/上傳圖片
這篇文章主要介紹了Java MultipartFile實(shí)現(xiàn)上傳文件/上傳圖片,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2020-12-12Java如何利用CompletableFuture描述任務(wù)之間的關(guān)系
Java如何根據(jù)線程的執(zhí)行結(jié)果執(zhí)行下一步動(dòng)作呢,F(xiàn)uture的另一個(gè)實(shí)現(xiàn)類CompletableFuture能夠優(yōu)雅的解決異步化問題,下面就跟隨小編一起了解一下吧2023-07-07