2017-08-02 145 views
1

我使用org.json來查找json對象和值(需要org.json),並且我試圖訪問子數組元素。在Java中獲取JSON嵌套數組元素

我的JSON:

{ 
    "Info": { 
    "name": "my_json", 
}, 
    "my_array": { 
    "arrays": [ 
     { 
     "array 1": [ 
     { 
      "name": "red", 
      "server": "red1", 
      "capacity": "123" 
     }, 
     { 
      "name": "blue", 
      "server": "blue1", 
      "capacity": "456" 
     } 
    ] 
    }, 
    { 
     "array 2": [ 
     { 
      "name": "white", 
      "server": "white1", 
      "capacity": "1234" 
     }, 
     { 
      "name": "black", 
      "server": "black1", 
      "capacity": "4567" 
     } 
     ] 
    } 
    ] 
} 
} 

此輸出:

{"array 1":[ 
    {"name":"red","capacity":"123","server":"red1"}, 
    {"capacity":"456","name":"blue","name":"blue1"} 
]} 
{"array 2":[ 
    {"capacacity":"1234","name":"white","server":"white1"}, 
    {"name":"black","capacity":"4567","server":"black1"} 
]} 
{"array 1":[ 
    {"name":"red","capacity":"123","server":"red1"}, 
    {"capacity":"456","name":"blue","name":"blue1"} 
]} 
{"array 2":[ 
    {"capacity":"1234","name":"white","server":"white1"}, 
    {"name":"black","capacity":"4567","server":"black1"} 
]} 

的方法是這樣的:

public static String processJson(String[] args) throws JSONException { 
    String value = ""; 
    String jsonData = readFile(args[0]); 
    JSONObject jobj = new JSONObject(jsonData); 
    if (args[1].equals("my_array")) { 
     JSONObject parent = jobj.getJSONObject("my_array"); 
     JSONArray jarr = parent.getJSONArray("arrays"); 
     for (int i = 0; i < jarr.length(); i++) { 
      for (int j = 0; j < jarr.length(); j++) { 
       JSONObject test1 = jarr.getJSONObject(j); 
       System.out.println(test1); 
      } 
     } 
    } 
    return value; 
} 

我想返回值是:

[{"name":"red","capacity":"123","server":"red1" 
{"capacity":"456","name":"blue","name":"blue1"}] 

是否有可能獲得array 1元素? 我認爲嵌套循環會照顧它,但它只輸出同一時間。

+0

什麼是ARGS [1]? – jeanr

+0

@jeanr我想這是'my_array' –

+0

當我嘗試讀取json有效載荷的結構時,它看起來像這樣:my_array.arrays [0]。「array 1」 my_array.arrays [1]。「array 1」 你確定你的json格式排列整齊,即在一個適當的層次或關係? – dirai

回答

2

如果你只想要第一個元素,然後如果你想格式化test1你可以不需要一個循環

 JSONObject test1 = jarr.getJSONObject(0); 
     System.out.println(test1); 

System.out.println (test1.toString().replace ("{\"array 1\":", "")); 
+0

不錯!刪除了兩個循環! –

+0

如果將'array 1'作爲參數傳遞,您將如何移除它?例如,'replace(「{\」variable name \「:」,「」)'不會刪除字符串。 –

+0

你可以使用像'str.replace(var,「」)''這樣的變量,其中'var'是一個類似於'var =「{\」「+」array 1「+」\「:」;';'' –