Разбор массива 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.
Расскажите мне, где я делаю ошибку и как это исправить.
Ответы
Ответ 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");
}