Подтвердить что ты не робот

Разбор массива 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.

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

4b9b3361

Ответ 1

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

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

Попробуйте следующее:

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

Ответ 2

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

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

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

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

Ответ 3

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

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

В строке 3 мне нужно сделать

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

Ответ 4

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)

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

Ответ 5

Это может быть ответ на ваш вопрос:

JSONArray msg1 = (JSONArray) json.get("source");
for(int i = 0; i < msg1.length(); i++){
  String name = msg1.getString("name");
  int age     = msg1.getInt("age");
}