2016-07-25 28 views
2

我掙扎着從格式化的這樣一個JSON文件中獲取一些值:檢索嵌套數組值與JSON的Java

{ 
    "search": { 
    "entry": [ 
     { 
     "found": "identity=9454532,l=big,ton=grand,k=molvi", 
     "attribute": [ 
      { 
      "name": "firstname", 
      "value": [ 
       "Lucas" 
      ] 
      }, 
      { 
      "name": "lastname", 
      "value": [ 
       "Brandon" 
      ] 
      } 
     ] 
     } 
    ], 
    "return": { 
     "code": 0, 
     "message": "Success", 
     "count": 1 
    } 
    } 
} 

我已經嘗試了不同的方法(JSON,GSON,jayway-JsonPath),但我不要設法從「屬性」數組中獲取值,只能從第一個數組中獲取值。我不知道如何指定「屬性」是一個JSONArray而不是一個JSONObject或如何設置適當的路徑。 這是當它開創一個數組的最後一個代碼,我與停止正在播放:

public void String nameObtain (String email) throws IOException{ 

String link = "http://jsonfile/" + email; 

    JSONObject json = readJsonFromUrl(link);   
    JSONObject rootObject = json.getJSONObject("search"); 
    JSONArray firstArray = rootObject.getJSONArray("entry"); 

for (int i = 0, size = firstArray.length(); i < size; i++) { 
    JSONObject objectInArray = firstArray.getJSONObject(i); 

    String[] elementNames = JSONObject.getNames(objectInArray); 
    System.out.printf("%d ELEMENTS IN CURRENT OBJECT:\n", elementNames.length); 
    for (String elementName : elementNames) { 
     String value = objectInArray.getString(elementName); 
     System.out.printf("name=%s, value=%s\n", elementName, value); 
    } 

} 

} 

我想這樣做是爲了獲取值盧卡斯和布蘭登。任何幫助都感激不盡!使用

+0

所以你想得到一個JSON數組,但使用'getString'?如果你不想指定你期望的類型,只需使用簡單的'get'方法即可。 –

+0

或者對於那些你知道是JSON數組的人使用'getJSONArray'。 –

+0

你能夠獲得「入口」數組的值嗎?如果是這樣,那麼它應該類似於「屬性」數組。 'getJSONArray'方法是你所需要的。無論從哪裏回來,都可以視爲JSONObject並進行迭代。 – Dadani

回答

4

庫:

import org.json.simple.JSONArray; 
import org.json.simple.JSONObject; 

檢查下面的代碼和步驟明智解析

JSONObject search = (JSONObject) jsonObject.get("search");//1 
    JSONArray entry = (JSONArray) search.get("entry");//2 
    for (int i = 0; i < entry.size(); i++) { 
     JSONObject jsonObject1 = (JSONObject) entry.get(i);//3 
     JSONArray jsonarray1 = (JSONArray) jsonObject1.get("attribute");//4 
     for (int j = 0; j < jsonarray1.size(); j++) { 
      System.out.println(((JSONObject) jsonarray1.get(j)).get(
        "value").toString());//5 

     } 

    } 

它會給值提到步驟明智:

1){ 「條目」 :[{ 「發現」: 「同一性= 9454532,L =大,噸=隆重,K = molvi」, 「屬性」:[{ 「名稱」: 「姓名」, 「值」:[ 「盧卡斯」]}, { 「名稱」: 「姓」, 「值」:[ 「布蘭登」]}]}], 「返回」:{ 「code」:0,「count」:1,「message」:「Success」}}

2)[{「found」:「identity = 9454532,l = big,ton = grand,k = molvi」 ,「屬性」:[{「name」:「firstname」,「value」:[「Lucas」]},{「name」:「lastname」,「value」:[「Brandon」]}]}]

3){「found」:「identity = 9454532,l = big,ton = grand,k = molvi」,「attribute」:[{「name」:「firstname」,「value」:[「Lucas」] },{「name」:「lastname」,「value」:[「Brandon」]}]}

4)[{「name」:「firstname」,「value」:[「Lucas」]}, {「name」:「lastname」,「value」:[「Brandon」]}]

5)[「Lucas」]和[「Brandon」]

所以基本上你必須分別照顧JSONObject和JSONArray,並相應地進行解析。

+0

感謝@Rishal,終於有一些光! –