#java #json #parsing
#java #json #синтаксический анализ
Вопрос:
У меня есть некоторый 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.
Пожалуйста, подскажите мне, где я допускаю ошибку и как это исправить.
Комментарии:
1. В вашем исходном коде нет проблем, я уже пробовал это.
Ответ №1:
mainJSON.getJSONArray("source")
возвращает JSONArray
, следовательно, вы можете удалить new JSONArray.
Конструктор JSONArray с параметром object ожидает, что это будет коллекция или массив (не JSONArray)
Попробуйте это:
JSONArray jsonMainArr = mainJSON.getJSONArray("source");
Комментарии:
1. Как мы можем проанализировать JSON подобным образом? [{«id»: «1», «name»:»ABC»},{«id»:»2″,»name»:»XYZ»}]
2. Это может помочь json = «{«m»=» json «}»; а теперь выполните синтаксический анализ по имени ‘m’.
Ответ №2:
Ваш код в порядке, просто замените следующую строку:
JSONArray jsonMainArr = new JSONArray(mainJSON.getJSONArray("source"));
с помощью этой строки:
JSONArray jsonMainArr = mainJSON.getJSONArray("source");
Комментарии:
1. Что, если полученный формат данных [{dict1},{dict2},{dict3}]?
2. Список JSONArray = новый JSONArray(jsonString);
Ответ №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 будет выглядеть следующим образом: [
{
«id»: 1001,
«имя»: «jhon»
},
{
«id»: 1002,
«имя»: «jhon»
}
]
Вы можете использовать:
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");
}
Комментарии:
1. Не могли бы вы, пожалуйста, подробнее изложить свой ответ, добавив немного больше описания предоставляемого вами решения?
2. не работает — нет ссылки на «i» при повторении
3. Не удается преобразовать строку в JSONArray, это не работает