2016-07-25 3 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), но я не удается получить значения из массива «attribute», только те из первого массива. Я не знаю, как указать, что «атрибут» - это 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); 
    } 

} 

} 

Что я хотел бы сделать, это получить значения Лукаса или Brandon. Любая помощь будет высоко ценится!

+0

Итак, вы хотите получить массив JSON, но используете 'getString'? Просто используйте простой метод 'get', если вы не хотите указывать, какой тип вы ожидаете. –

+0

Или используйте 'getJSONArray' для тех, кого вы знаете, массивы JSON. –

+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, л = большой, т = большой, к = Молви", "атрибут": [{ "имя": "Firstname", "значение": [ "Лукас"]}, { "имя": "фамилия", "значение": [ "Brandon"]}]}], "возвращение": { «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, наконец-то какой-то свет !! –

Смежные вопросы