我想了一下,但是得有一個(gè)前提,就是第一個(gè)json數(shù)組的size必須和第二個(gè)json數(shù)組的size相同,并且一一對(duì)應(yīng),否則將造成數(shù)組溢出。
成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供營(yíng)山網(wǎng)站建設(shè)、營(yíng)山做網(wǎng)站、營(yíng)山網(wǎng)站設(shè)計(jì)、營(yíng)山網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、營(yíng)山企業(yè)網(wǎng)站模板建站服務(wù),10余年營(yíng)山做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
如果是基于上面這個(gè)前提,那么實(shí)現(xiàn)的方法就簡(jiǎn)單了。
操作json對(duì)象,其實(shí)標(biāo)準(zhǔn)的方法是將實(shí)體類轉(zhuǎn)換成json后再操作,我這里的話為了便捷直接使用谷歌的Gson來(lái)創(chuàng)建JsonObject了,其他的json依賴還有阿里巴巴的FastJson等等,看你平時(shí)用什么習(xí)慣。
引入Gson依賴:
dependency
groupIdcom.google.code.gson/groupId
artifactIdgson/artifactId
version2.8.0/version
/dependency
實(shí)現(xiàn)代碼:
public class Main {
public static void main(String[] args) {
JsonArray jsonArray1 = new JsonArray();
JsonObject json11 = new JsonObject();
json11.addProperty("數(shù)據(jù)1", "0000");
json11.addProperty("數(shù)據(jù)2", "1111");
JsonObject json12 = new JsonObject();
json12.addProperty("數(shù)據(jù)1", "0000");
json12.addProperty("數(shù)據(jù)2", "1111");
JsonObject json13 = new JsonObject();
json13.addProperty("數(shù)據(jù)1", "0000");
json13.addProperty("數(shù)據(jù)2", "1111");
jsonArray1.add(json11);
jsonArray1.add(json12);
jsonArray1.add(json13);
System.out.println(jsonArray1);
JsonArray jsonArray2 = new JsonArray();
JsonObject json21 = new JsonObject();
json21.addProperty("數(shù)據(jù)3", "6666");
JsonObject json22 = new JsonObject();
json22.addProperty("數(shù)據(jù)3", "6666");
JsonObject json23 = new JsonObject();
json23.addProperty("數(shù)據(jù)3", "6666");
jsonArray2.add(json21);
jsonArray2.add(json22);
jsonArray2.add(json23);
System.out.println(jsonArray2);
//遍歷json數(shù)組,按位取出對(duì)象
for (int i = 0; i jsonArray1.size(); i++) {
JsonObject json1 = jsonArray1.get(i).getAsJsonObject();
JsonObject json3 = jsonArray2.get(i).getAsJsonObject();
//遍歷數(shù)據(jù)3內(nèi)容,通過(guò)Entry獲取數(shù)據(jù)3的key和value,并合并到數(shù)據(jù)1中
for (Map.EntryString, JsonElement item : json3.entrySet()) {
json1.addProperty(item.getKey(), item.getValue().getAsString());
}
}
System.out.println(jsonArray1);
}
}
整體思路為:遍歷兩個(gè)json數(shù)組,按位進(jìn)行合并操作。合并時(shí),遍歷數(shù)據(jù)3的jsonObject,獲取其key和value,并將其合并到數(shù)據(jù)1中即可。
運(yùn)行結(jié)果:
使用原生的解析:
String json = "...";
//遍歷數(shù)組里的值,得到每個(gè)獨(dú)立的對(duì)象,然后獲取對(duì)應(yīng)的值設(shè)置到聲明好的對(duì)象中,最終創(chuàng)建對(duì)象完成后添加到集合中,如我自己代碼里的片段:
for (int j = 0; j array.length(); j++) {
obj = array.getJSONObject(j);
Data data = new Data();
mDataList.add(data);
}
數(shù)組聲明
在數(shù)組的聲明格式里,“數(shù)據(jù)類型”是聲明數(shù)組元素的數(shù)據(jù)類型,可以是java語(yǔ)言中任意的數(shù)據(jù)類型,包括簡(jiǎn)單類型和結(jié)構(gòu)類型。“數(shù)組名”是用來(lái)統(tǒng)一這些相同數(shù)據(jù)類型的名稱,其命名規(guī)則和變量的命名規(guī)則相同。
數(shù)組聲明之后,接下來(lái)便是要分配數(shù)組所需要的內(nèi)存,這時(shí)必須用運(yùn)算符new,其中“個(gè)數(shù)”是告訴編譯器,所聲明的數(shù)組要存放多少個(gè)元素,所以new運(yùn)算符是通知編譯器根據(jù)括號(hào)里的個(gè)數(shù),在內(nèi)存中分配一塊空間供該數(shù)組使用。利用new運(yùn)算符為數(shù)組元素分配內(nèi)存空間的方式稱為動(dòng)態(tài)分配方式。
以上內(nèi)容參考:百度百科-數(shù)組
工具/原料
安裝有eclipse軟件的電腦一臺(tái)
方法/步驟
1
首先我們?cè)趀clipse中創(chuàng)建一個(gè)java工程,在java工程中創(chuàng)建一個(gè)HelloWorld的類,在這個(gè)java的入口程序中,我們來(lái)創(chuàng)建一個(gè)json字符串,并且打印出來(lái),如下圖:
2
將我們剛剛創(chuàng)建的json字符串打印出來(lái)如下所示,可以看出這個(gè)json包含了一個(gè)大json對(duì)象,大json對(duì)象里面又包含一個(gè)json數(shù)組,一個(gè)數(shù)組里面又包含三個(gè)json對(duì)象,如下圖:
3
在java中我們要解析json數(shù)組必須借助第三方包,所以這里我們加載一下第三方包,首先我們將鼠標(biāo)移動(dòng)到項(xiàng)目名稱上面去,然后右鍵召喚出右鍵快捷菜單,然后依次點(diǎn)擊Build Path-Configure Build Paht...,如下圖:
4
然后我們按照?qǐng)D中紅色方框所示點(diǎn)擊Libraries,然后點(diǎn)擊Add Library...,如下圖所示:
5
然后我們繼續(xù)按照?qǐng)D中所示點(diǎn)擊User Library,然后點(diǎn)擊Next,如下圖:
6
然后我們繼續(xù)按照?qǐng)D中紅色方框所示點(diǎn)擊User Libraries...,如下圖:
7
然后我們點(diǎn)擊New...,來(lái)開始創(chuàng)建我們自己的libraries,如下圖:
8
然后我們輸入我們自己jar庫(kù)的名字,這里我使用了jsonjar作為我們的名字,如下圖:
9
接下來(lái)為我們的jar庫(kù)添加jar包,我們按照下圖中紅色方框所示點(diǎn)擊“Add External JARs”,如下圖:
10
我們添加json相關(guān)的jar包,這里涉及json的第三方包主要包括這七個(gè),所以我們把這七個(gè)包都引入到我們自己的jar庫(kù)中去,如下圖:
11
返回到User Libraries中發(fā)現(xiàn),我們已經(jīng)引入了所有的jar包,如下圖:
我們按照下圖中紅色方框所示畫勾,然后點(diǎn)擊finish,如下圖:
然后我們按照?qǐng)D中紅色邊框所示點(diǎn)擊Apply,然后點(diǎn)擊OK,如下圖:
回到我們的工程中,從工程目錄中我們可以看到,我們已經(jīng)添加了自己的名字為jsonjar的jar庫(kù),如下圖:
接下來(lái)我們回到程序中,在頭部添加“import net.sf.json.JSONArray;import net.sf.json.JSONObject;”這兩句代碼,這兩句表示引入了解析json的對(duì)象和數(shù)組的包,如下圖:
然后我們通過(guò)代碼“JSONObject.fromObject(json_array)”來(lái)將我們之前創(chuàng)建的json字符串轉(zhuǎn)換成json對(duì)象,并且通過(guò)鍵值對(duì)的方式打印出json對(duì)象名字為“employees”的值,如下圖:
打印出的名字為“employees”的json對(duì)象的值如下圖是一個(gè)數(shù)組字符串,如下圖:
接下來(lái)我們通過(guò)代碼“jsonobj.getJSONArray("employees")”來(lái)將獲取的數(shù)組字符串轉(zhuǎn)變成為json組數(shù),如下圖:
并且我們打印出json數(shù)組的長(zhǎng)度,可見程序計(jì)算的json數(shù)組的長(zhǎng)度和我們實(shí)際的數(shù)組長(zhǎng)度相一致,如下圖:
接下來(lái)我們通過(guò)一個(gè)for循環(huán)將我們獲取的json數(shù)組中的值依次取出來(lái),由于數(shù)組中又包含3個(gè)對(duì)象,我們又需要將3個(gè)對(duì)象使用代碼“JSONObject.fromObject(jsonarr.get(i));”將得到的對(duì)象字符串變成對(duì)象然后再取出來(lái),如下圖:
最后,我們將json數(shù)組的所有內(nèi)容都展示到控制臺(tái),這樣我們就可以使用java通過(guò)第三方j(luò)son包來(lái)解析json數(shù)組了,如下圖: