Использование GSON в Android для анализа сложного объекта JSON - PullRequest
14 голосов
/ 29 декабря 2010

Я относительно новичок в программировании на Java, и мне нужно проанализировать сложный объект JSON по проводам.За прошедший день я читал документацию по GSON, и мне не повезло, что я смог полностью разобрать структуру такого типа:

{
  'Events' : [{
    'name' : 'exp',
    'date' : '10-10-2010',
    'tags' : ["tag 1", "tag2", "tag3"]
    },...more events...],
  'Contacts' : [{
    'name' : 'John Smith',
    'date' : '10-10-2010',
    'tags' : ["tag 1", "tag2", "tag3"]
    },...more contacts...],
}

Я смог заставить ее работать аналогично этот вопрос, но не могу понять, как заставить работать этот дополнительный уровень массива.

Ответы [ 2 ]

18 голосов
/ 16 января 2011

Правильный способ сделать это с помощью GSON в нужном мне формате:

//somewhere after the web response:
Gson gson = new Gson();

Event[] events = gson.fromJson(webServiceResponse,  Event[].class);


//somewhere nested in the class:
static class Event{
    String name;
    String date;

    public String getName()
    {
        return name;
    }

    public String getDate()
    {
        return date;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public void setDate(String date)
    {
        this.date = date;
    }
}
7 голосов
/ 30 декабря 2010

Java имеет свой собственный анализатор JSON: мы можем использовать его и на Android.

Ниже вы можете найти информацию о том, как получить все события из вашей строки.

String TAG        = "JSON EXAMPLE";
    String jsonString = "{\"Events\" : [{\"name\" : \"exp\",\"date\" : \"10-10-2010\",\"tags\" : [\"tag 1\",\"tag 2\",\"tag 3\"]}],\"Contacts\" : [{\"name\" : \"John Smith\",\"date\" : \"10-10-2010\",\"tags\" : [\"tag 1\",\"tag 2\",\"tag 3\"]}]}";

    try {
        JSONObject jsonObj    = new JSONObject(jsonString);     // create a json object from a string
        JSONArray  jsonEvents = jsonObj.getJSONArray("Events"); // get all events as json objects from Events array

        for(int i = 0; i < jsonEvents.length(); i++){
            JSONObject event = jsonEvents.getJSONObject(i); // create a single event jsonObject
            Log.e(TAG, "Event name:" + event.getString("name") + " date: " + event.getString("date"));


            JSONArray eventTags = event.getJSONArray("tags");

            for(int j = 0; j < eventTags.length(); j++){
                Log.e(TAG, "Event tag: " + eventTags.getString(j));
            }

        }           

    } catch (JSONException e) {
        e.printStackTrace();
    }

Имейте в виду: ваш объект JSON (из вашего вопроса) сгенерирует исключение, потому что он недопустим (я не уверен, но он выглядит как объект javascript) Вы должны добавить несколько кавычек к каждому свойству (ключу) и заменить их на \ (\ ").
Этот инструмент действительно хорош для проверки, является ли строка JSON действительной или нет.

...