Как разобрать эти строки JSON?(Используя gson) - PullRequest
1 голос
/ 06 февраля 2012

У меня есть строка json: http://pastebin.com/ckUZadwL

Я пытаюсь использовать gson для их анализа.Однако у меня есть вопрос.В новом ответе пользовательский элемент содержит общий идентификатор в качестве ключа, и, поскольку он находится во внутреннем классе, я не уверен, как его проанализировать.

Спасибо за вашу помощь.

Вот несколько контейнеров классов, которые я собираю для хранения данных:

public class CometCallback
{
    public int new_offset;
    public Data[] data;
}

public class Data
{
    public long plurk_id;
    public int response_count;
    public Response response;
    public UserInfo user; 
    public String type;
    public Plurk plurk;
}

public class Response
{
    public String lang;
    public String content_raw;
    public long user_id;
    public String qualifier;
    public long plurk_id;
    public String content;
    public long id;
    public String posted;
}

public class Plurk extends Response
{
    public Object[] replurkers;
    public int responses_seen;
    public int replurkers_count;
    public String replurker_id;
    public int response_count;
    public boolean replurkable;
    public Object limited_to;
    public int favorite_count;
    public int is_unread;
    public Object[] favorers;
    public int plurk_type;
    public boolean replurked;
    public boolean favorite;
    public int no_comments;
    public long owner_id;
}

1 Ответ

1 голос
/ 06 февраля 2012

У меня есть несколько вещей, которыми можно поделиться о вас:

  1. Самая большая проблема, с которой вы столкнетесь, заключается в том, что у пользователя Сериализация json - его идентификатор используется в качестве ключа. Единственный способ, о котором я могу думать, это использовать enableComplexMapKeySerialization параметр GsonBuilder. Затем вам нужно объявить UsewrInfo как содержащий только один элемент Map<Integer, User> и объявить компонент User со всеми атрибутами, сопоставленными с идентификатором.
  2. Полагаю, вы знаете, что для gson не обязательно иметь имена полей класса, соответствующие ключам в gson. Например, вы можете еще используйте newOffset в верблюжьей клетке и проанализируйте в нем поле new_offset. Вам просто нужно разместить аннотацию GSON @SerializedName("new_offser") над объявлением поля.
  3. Вот как вы делаете десериализацию из json с помощью gson. это очень прямо:

    Gson gson = new GsonBuilder()
        .enableComplexMapKeySerialization()
        .serializeNulls()
        .setDateFormat(MY_DATE_FORMAT)
        .create();
    CometCallback cometCallback = gson.fromJson(jsonFile, CometCallback.class) ;
    

    Я расскажу о опции DateFormat в следующем разделе. serializeNulls необходимо, потому что я видел атрибуты с нулем значения также сериализуются как "date_of_birth": null.

  4. О DateFormat - Я видел, как вы объявляете public String posted; как строка Однако gson может разобрать даты прямо из json Строка для вас, пока вы указываете точный формат даты будет в. Вот точный формат, я думаю, вы определяете свои даты в:

    public static final SimpleDateFormat MY_DATE_FORMAT = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z");
    

    Теперь, объявив это и передав его в setDateFormat(MY_DATE_FORMAT) метод, который вы должны изменить все ваши даты будут считаны как даты, и gson проанализирует их для вас.

  5. Кстати, я полагаю, вы это знаете, но вы можете десериализовать JSON массивы в списки, например. Это происходит просто объявив поля соответственно и gson автоматически сохранит их.

Надеюсь, все это поможет вам десериализовать ваши данные. Удачного кодирования!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...