it-swarm.com.ru

Разбор массива JSON в объекте JSON

У меня есть JSON со следующей структурой:

{"source":[
           {"name":"john","age":20},
           {"name":"michael","age":25},
           {"name":"sara", "age":23}
         ]
}

Я назвал эту строку JSON как mainJSON. Я пытаюсь получить доступ к элементам "имя" и "возраст" с помощью следующего кода Java:

JSONArray jsonMainArr = new JSONArray(mainJSON.getJSONArray("source"));
for (int i = 0; i < jsonMainArr.length(); i++) {  // **line 2**
     JSONObject childJSONObject = jsonMainArr.getJSONObject(i);
     String name = childJSONObject.getString("name");
     int age     = childJSONObject.getInt("age");
}

Мне показывают следующее исключение для строки № 2: 

org.json.JSONException: JSONArray initial value should be a string or collection or array.

Пожалуйста, объясните мне, где я совершаю ошибку и как ее исправить.

45
Amitava Chakraborty

mainJSON.getJSONArray("source") возвращает JSONArray, следовательно, вы можете удалить new JSONArray.

Конструктор JSON Array с параметром объекта ожидает, что он будет коллекцией или массивом (не JSONArray)

Попробуй это:

JSONArray jsonMainArr = mainJSON.getJSONArray("source"); 
50
Chandu

Ваш код в порядке, просто замените следующую строку:

JSONArray jsonMainArr = new JSONArray(mainJSON.getJSONArray("source"));

с этой строкой:

JSONArray jsonMainArr = mainJSON.getJSONArray("source");
9
Imran Muhammad
private static String readAll(Reader rd) throws IOException {
    StringBuilder sb = new StringBuilder();
    int cp;
    while ((cp = rd.read()) != -1) {
      sb.append((char) cp);
    }
    return sb.toString();
  }

 String jsonText = readAll(inputofyourjsonstream);
 JSONObject json = new JSONObject(jsonText);
 JSONArray arr = json.getJSONArray("sources");

Ваш arr будет выглядеть так: [ { "Идентификатор": 1001, "Название": "Йон" }, { "Идентификатор": 1002, "Название": "Йон" }]Ты можешь использовать:

arr.getJSONObject(index)

чтобы получить объекты внутри массива.

0
Kun

строка 2 должна быть

for (int i = 0; i < jsonMainArr.size(); i++) {  // **line 2**

Для строки 3 я должен сделать

    JSONObject childJSONObject = (JSONObject) new JSONParser().parse(jsonMainArr.get(i).toString());
0
Vinay Vemula