淺談在Java中JSON的多種使用方式
1. 常用的JSON轉(zhuǎn)換
JSONObject 轉(zhuǎn) JSON 字符串
JSONObject json = new JSONObject();
jsonObject.put("name", "test");
String str = JSONObject.toJSONString(json);
JSON字符串轉(zhuǎn)JSON
String str = "{\"name\":\"test\"}";
JSONObject json = JSONObject.parseObject(str);
實(shí)體類(lèi)轉(zhuǎn)JSON
Test test = new Test();
test.setName("test");
String testStr = JSONObject.toJSONString(test);
JSONObject json = JSONObject.parseObject(testStr);
Map轉(zhuǎn)JSON
JSONObject json = JSONObject.parseObject(JSON.toJSONString(map));
JSON轉(zhuǎn)Map
Map jsonToMap = JSONObject.parseObject(jsonObject.toJSONString());
2. 將多個(gè)JSON合并一個(gè)
JSONObject totalJSON = new JSONObject(); totalJSON.putAll(json1); totalJSON.putAll(json2);
json1,json2 為JSONObject。 最終的代碼格式:
{
json1:{},
json2:{}
}
3.JSON拆分
不同的需求有不同的做法,以下提供兩種解決思路
- 定義兩個(gè)或多個(gè)JSON進(jìn)行put和remove 比如明確需要哪些字段的時(shí)候可以定義一個(gè)數(shù)組用來(lái)存放key信息。存放和刪除的時(shí)候只需要遍歷數(shù)組就可以。
- 遍歷JSON,獲取key,value再重新put
4.JSON遍歷
定義一個(gè)工具類(lèi),獲取key和value
if(object instanceof JSONObject) {
JSONObject jsonObject = (JSONObject) object;
for (Map.Entry<String, Object> entry: jsonObject.entrySet()) {
Object o = entry.getValue();
if(o instanceof String) {
System.out.println("key:" + entry.getKey() + ",value:" + entry.getValue());
} else {
jsonLoop(o);
}
}
}
if(object instanceof JSONArray) {
JSONArray jsonArray = (JSONArray) object;
for(int i = 0; i < jsonArray.size(); i ++) {
jsonLoop(jsonArray.get(i));
}
}
JSONArray遍歷的方式有很多種
for
for(int i = 0; i < jsonArray.size(); i++){
JSONObject json = jsonArray.getJSONObject(i);
}
foreach
jsonArray.forEach(o -> {
if (o instanceof JSONObject) {
JSONObject json = (JSONObject) o;
}
Iterator
JSONObject jsonObject = new JSONObject(jsonString);
Iterator iterator = jsonObject.keys();
while(iterator.hasNext()){
key = (String) iterator.next();
value = jsonObject.getString(key);
}
5.JSONPath
另外向大家推薦一個(gè)非常好用的工具:JSONPath。
JSONPath是一種簡(jiǎn)單的方法來(lái)提取給定JSON的部分內(nèi)容,使用方式類(lèi)似于正則表達(dá)式。 GitHub地址: https://github.com/json-path/JsonPath
簡(jiǎn)單描述下使用方法已經(jīng)自己使用的案例 pom文件依賴(lài):
<dependency> <groupId>com.jayway.jsonpath</groupId> <artifactId>json-path</artifactId> <version>2.2.0</version> </dependency>
JsonPath表達(dá)式總是以與XPath表達(dá)式結(jié)合使用XML文檔相同的方式引用JSON結(jié)構(gòu)。
JsonPath中的“根成員對(duì)象”始終稱(chēng)為$,無(wú)論是對(duì)象還是數(shù)組。
JsonPath表達(dá)式可以使用點(diǎn)表示法。
這里有個(gè)表格,說(shuō)明JSONPath語(yǔ)法元素和對(duì)應(yīng)XPath元素的對(duì)比。

官方案例:
詳細(xì)大家還是參照官方解說(shuō)。 下面是我寫(xiě)的案例:
JSONArray jsonArray = JSONPath.read("$.ePrint.common..label");

需要注意的是這里的JSONArray是JSONPath的,所以導(dǎo)包是:net.minidev.json.JSONPath JSON格式不會(huì)變,所以可以轉(zhuǎn)換為alibaba的JSONArray:
com.alibaba.fastjson.JSONArray jsonArr = JSON.parse(jsonArray.toString());
這里要注意一點(diǎn)也是我踩過(guò)的坑:如果獲取一個(gè)JSONObject下有多個(gè)同名的JSONArray,那么返回的[]也是多個(gè)。要先遍歷獲取到的數(shù)據(jù),在取其中的一個(gè)JSON塊。
到此這篇關(guān)于淺談在Java中JSON的多種使用方式的文章就介紹到這了,更多相關(guān)Java中JSON使用方式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- JAVA對(duì)象JSON數(shù)據(jù)互相轉(zhuǎn)換的四種常見(jiàn)情況
- Java中JSON字符串與java對(duì)象的互換實(shí)例詳解
- 使用Jackson來(lái)實(shí)現(xiàn)Java對(duì)象與JSON的相互轉(zhuǎn)換的教程
- java中實(shí)體類(lèi)和JSON對(duì)象之間相互轉(zhuǎn)化
- java中實(shí)體類(lèi)轉(zhuǎn)Json的2種方法
- java生成json數(shù)據(jù)示例
- JAVA實(shí)現(xiàn)JSON后端向前端傳遞數(shù)據(jù)
- 基于java解析JSON的三種方式詳解
- java對(duì)象與json對(duì)象間的相互轉(zhuǎn)換的方法
相關(guān)文章
Java網(wǎng)絡(luò)編程之TCP通信完整代碼示例
這篇文章主要介紹了Java網(wǎng)絡(luò)編程之TCP通信完整代碼示例,具有一定借鑒價(jià)值,需要的朋友可以了解下。2017-12-12
如何使用Java redis實(shí)現(xiàn)發(fā)送手機(jī)驗(yàn)證碼功能
這篇文章主要介紹了如何使用Java redis實(shí)現(xiàn)發(fā)送手機(jī)驗(yàn)證碼功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
Maven多模塊工程Module開(kāi)發(fā)(圖文教程)
這篇文章主要介紹了Maven多模塊工程Module開(kāi)發(fā)(圖文教程),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
java實(shí)現(xiàn)fibonacci數(shù)列學(xué)習(xí)示例分享(斐波那契數(shù)列)
這篇文章主要介紹了fibonacci數(shù)列(斐波那契數(shù)列)示例,大家參考使用吧2014-01-01
spring中WebClient如何設(shè)置連接超時(shí)時(shí)間以及讀取超時(shí)時(shí)間
這篇文章主要給大家介紹了關(guān)于spring中WebClient如何設(shè)置連接超時(shí)時(shí)間以及讀取超時(shí)時(shí)間的相關(guān)資料,WebClient是Spring框架5.0引入的基于響應(yīng)式編程模型的HTTP客戶(hù)端,它提供一種簡(jiǎn)便的方式來(lái)處理HTTP請(qǐng)求和響應(yīng),需要的朋友可以參考下2024-08-08
SpringBoot+MyBatis-Plus實(shí)現(xiàn)數(shù)據(jù)庫(kù)讀寫(xiě)分離的代碼示例
在當(dāng)今互聯(lián)網(wǎng)應(yīng)用中,數(shù)據(jù)庫(kù)讀寫(xiě)分離是提高系統(tǒng)性能和穩(wěn)定性的重要手段之一,通過(guò)將讀操作和寫(xiě)操作分別路由到不同的數(shù)據(jù)庫(kù)節(jié)點(diǎn),可以有效減輕數(shù)據(jù)庫(kù)服務(wù)器的負(fù)擔(dān),本文將介紹如何利用SpringBoot和MyBatis-Plus框架實(shí)現(xiàn)數(shù)據(jù)庫(kù)讀寫(xiě)分離,需要的朋友可以參考下2023-11-11
解決因jdk版本引起的TypeNotPresentExceptionProxy異常
這篇文章介紹了解決因jdk版本引起的TypeNotPresentExceptionProxy異常的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12
spring boot 實(shí)現(xiàn)Minio分片上傳的步驟
分片上傳,就是將所要上傳的文件,按照一定的大小,將整個(gè)文件分隔成多個(gè)數(shù)據(jù)塊來(lái)進(jìn)行分別上傳,上傳完之后再由服務(wù)端對(duì)所有上傳的文件進(jìn)行匯總整合成原始的文件,本文給大家介紹spring boot 實(shí)現(xiàn)Minio分片上傳的步驟,感興趣的朋友跟隨小編一起看看吧2023-10-10

