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

Как разобрать 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. Как я могу это сделать? Спасибо.

4b9b3361

Ответ 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);