Как разобрать JSON и превратить его значения в массив? - PullRequest
37 голосов
/ 13 февраля 2010
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 из JSONs, за которыми следуют VALUES из JSONS.

Было бы напечатано профилей, Джон , если бы json был таким:

{'profiles':'john'}

Это круто. Это нормально, так как я могу работать с этими переменными. Тем не менее, что, если JSON был такой:

{'profiles': [{'name':'john', 'age': 44}, {'name':'Alex','age':11}]}

В этом случае все значение будет массивом. По сути, я просто хочу получить этот массив (который в данном случае является «значением») ... и превратить его в реальный массив, который может использовать JAVA. Как я могу это сделать? Спасибо.

Ответы [ 2 ]

57 голосов
/ 13 февраля 2010

для вашего примера:

{'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) начинается с символа [).

Надеюсь, это поможет.

0 голосов
/ 01 марта 2013

Вы можете предпочесть быстрый анализатор json, чтобы удовлетворить ваши требования ...

Парсер quick-json очень простой, гибкий, очень быстрый и настраиваемый. Попробуйте это

[быстрый анализатор json] (https://code.google.com/p/quick-json/) - функции быстрого JSON -

  • Соответствует спецификации JSON (RFC4627)

  • Высокопроизводительный анализатор JSON

  • Поддерживает гибкий / настраиваемый подход к синтаксическому анализу

  • Настраиваемая проверка пар ключ / значение любой иерархии JSON

  • Простота использования # Очень низкий отпечаток стопы

  • Повышает удобство для разработчиков и легко отследить исключения

  • Поддержка сменной пользовательской проверки - ключи / значения могут быть проверены путем настройки пользовательских средств проверки по мере их появления

  • Проверка и не проверка поддержки синтаксического анализатора

  • Поддержка двух типов конфигурации (JSON / XML) для использования анализатора быстрой проверки json

  • Требуется JDK 1.5 # Нет зависимости от внешних библиотек

  • Поддержка генерации Json через сериализацию объектов

  • Поддержка выбора типа коллекции во время анализа

Например,

JsonParserFactory factory=JsonParserFactory.getInstance();
JSONParser parser=factory.newJsonParser();
Map jsonMap=parser.parseJson(jsonString);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...