項目中有如下一個JSONObject, 如何取出“20180612”
項目中用的alibaba的fastjson
項目中取的方法如下所示
然後我就試圖自己構造這個dataSet,構造完之後就開始取date
下圖中倒數第二行可以取出來,但是照着上面的方法寫,也就是倒數第一行所示
JSONArray arr0 = result.getJSONArray(0);
這行代碼會意外中斷
好一會我都意識不到最後一行代碼的寫法爲啥項目中能取到,我的就取不到
然後我就通過斷點看了一下json結構,紅框框處的地方顯示出兩者的不同
項目中value下面還有一級,而我構造的這個就沒有
項目中的value相當於JSONArray套JSONArray
而我構造的value相當於value就是一層JSONArray
然後我就意識到項目中result的value取值其實是一個二維數組
第一維是按date劃分的,第二維是相當於一個bean中各個字段的取值,
第二維其實裏用bean挺好的,外層一個JSONArray,內層是一個一個bean,多好啊,爲啥項目中內層非要用一個JSONArray,用數組甚至沒法表示每個元素的含義,用JSONObject也比這個強
// JSONArray中能添加不同類型的元素,但是不是鍵值對的形式,也是通過下標取數的
// JSONObject完全能取代map,也可以用來構造javabean,這就是項目中爲啥到處都是JSON
// JSONArray和普通的數組用法相似,通過下標索引,甚至可以存放不同類型的元素,也可以嵌套使用
然後我就開始重新構造這個dataSet
下面附上完整代碼
public class testJson {
public static void main(String[] args) {
JSONObject dataSet = new JSONObject();
JSONArray value_out = new JSONArray(); // value的外層JSONArray
JSONArray inner_12 = new JSONArray(); // 內層12
inner_12.add("20180612");
inner_12.add("54505");
inner_12.add("2");
JSONArray inner_13 = new JSONArray(); // 內層13
inner_13.add("20180613");
inner_13.add("54505");
inner_13.add("2");
JSONArray inner_14 = new JSONArray(); // 內層14
inner_14.add("20180614");
inner_14.add("54505");
inner_14.add("2");
// 往外層JSONArray中套JSONArray
value_out.add(inner_12);
value_out.add(inner_13);
value_out.add(inner_14);
dataSet.put("result", value_out); // put(key1, value1)
dataSet.put("sum", value_out); // put(key2,value2)
JSONArray result = dataSet.getJSONArray("result"); // 獲取到的是二維數組,JSONArray套JSONArray
JSONArray sum = dataSet.getJSONArray("sum");
String date0 = result.getJSONArray(0).getString(0); // 獲取第一個元素的date
System.out.println(date0);
if (!CollectionUtils.isEmpty(result)) {
for (int i = 0; i < result.size(); i++) {
JSONArray record = result.getJSONArray(i); // 獲取內層json數組
String date = record.getString(0);
System.out.println(date);
}
}
}
}