Разбор массива JSON в объекте JSON - PullRequest
45 голосов
/ 13 апреля 2011

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

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

Я назвал эту строку JSON mainJSON.Я пытаюсь получить доступ к элементам "name" и "age" с помощью следующего кода 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.

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

Ответы [ 5 ]

50 голосов
/ 13 апреля 2011

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

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

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

JSONArray jsonMainArr = mainJSON.getJSONArray("source"); 
9 голосов
/ 29 июня 2013

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

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

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

JSONArray jsonMainArr = mainJSON.getJSONArray("source");
0 голосов
/ 06 апреля 2016
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 голосов
/ 22 декабря 2015

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

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

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

    JSONObject childJSONObject = (JSONObject) new JSONParser().parse(jsonMainArr.get(i).toString());
0 голосов
/ 15 июня 2015

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

JSONArray msg1 = (JSONArray) json.get("source");
for(int i = 0; i < msg1.length(); i++){
  String name = msg1.getString("name");
  int age     = msg1.getInt("age");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...