Как разобрать JSON и превратить его значения в массив?
public static void parseProfilesJson(String the_json){
try {
JSONObject myjson = new JSONObject(the_json);
JSONArray nameArray = myjson.names();
JSONArray valArray = myjson.toJSONArray(nameArray);
for(int i=0;i<valArray.length();i++)
{
String p = nameArray.getString(i) + "," + ValArray.getString(i);
Log.i("p",p);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
Как вы можете видеть, этот пример кода распечатает KEY JSON, а затем VALUES JSONS.
Он будет печатать профили , john, если json был примерно таким:
{'profiles':'john'}
Это круто. Это прекрасно, поскольку я могу работать с этими переменными. Однако, что, если JSON был таким:
{'profiles': [{'name':'john', 'age': 44}, {'name':'Alex','age':11}]}
В этом случае все значение будет массивом. В принципе, я просто хочу захватить этот массив (который в этом случае является "значением" )... и превратить его в фактический массив, который может использовать JAVA. Как я могу это сделать? Спасибо.
Ответы
Ответ 1
для вашего примера:
{'profiles': [{'name':'john', 'age': 44}, {'name':'Alex','age':11}]}
вам нужно будет сделать что-то из этого эффекта:
JSONObject myjson = new JSONObject(the_json);
JSONArray the_json_array = myjson.getJSONArray("profiles");
возвращает объект массива.
Тогда итерация будет следующей:
int size = the_json_array.length();
ArrayList<JSONObject> arrays = new ArrayList<JSONObject>();
for (int i = 0; i < size; i++) {
JSONObject another_json_object = the_json_array.getJSONObject(i);
//Blah blah blah...
arrays.add(another_json_object);
}
//Finally
JSONObject[] jsons = new JSONObject[arrays.size()];
arrays.toArray(jsons);
//The end...
Вам нужно будет определить, являются ли данные массивом (просто проверяя, что charAt(0)
начинается с символа [
).
Надеюсь, что это поможет.
Ответ 2
Вы можете использовать парсер quick-json для удовлетворения ваших требований...
quick-json parser очень прост, гибкий, очень быстрый и настраиваемый. Попробуйте это
[quick-json parser] (https://code.google.com/p/quick-json/)
- функции quick-json -
-
Соответствует спецификации JSON (RFC4627)
-
Высокопроизводительный парсер JSON
-
Поддержка гибкого/настраиваемого подхода к анализу
-
Настраиваемая проверка пар ключ/значение любой иерархии JSON
-
Простота использования # Очень медленная печать на стопку
-
Повышает дружественные и легко отслеживаемые исключения для разработчиков
-
Поддержка подключаемых пользовательских валидаций. Ключи/значения могут быть подтверждены путем настройки настраиваемых валидаторов по мере их возникновения.
-
Поддержка проверки и неавтоматизации парсера
-
Поддержка двух типов конфигурации (JSON/XML) для использования проверочного парсера quick-json
-
Требовать JDK 1.5 # Нет зависимости от внешних библиотек
-
Поддержка Json Generation посредством сериализации объектов
-
Поддержка выбора типа коллекции во время процесса анализа
Например,
JsonParserFactory factory=JsonParserFactory.getInstance();
JSONParser parser=factory.newJsonParser();
Map jsonMap=parser.parseJson(jsonString);