Gson вызывает возврат пустых объектов в нескольких классах

1

Я пытаюсь сериализовать сериализацию строки json, приведенной ниже.

 {
        "mood": {
            "is_featured": true,
            "description": null,
            "title": "2014 ",
            "ordering": null,
            "is_recently_modified": true,
            "is_test": false,
            "tracks": [

            {
                "album": {
                    "release_date": "2014-11-06",
                    "id": 359778,
                    "name": "Amansız Gücenik"
                },
                "name": "Hırpalandı Mayıs",
                "artist": {
                    "id": 491169,
                    "name": "Ceylan Ertem"
                },
                "duration": 227,
                "isrc": "TRA161400207",
                "id": 3903997
            },
            {
                "album": {
                    "release_date": "2013-08-05",
                    "id": 329129,
                    "name": "For Fuld Musik - 25 Danske Sommer Pop & Rock Hits Vol. 2"
                },
                "name": "Am I Wrong",
                "artist": {
                    "id": 755957,
                    "name": "Nico & Vinz"
                },
                "duration": 387,
                "isrc": "NO2G31301011",
                "id": 3655085
            }
        ],
        "image_url": "some_url",
        "is_recently_created": true,
        "id": 128
    }
}

Я использую этот вызов gson для его сериализации

Mood mood = new Gson().fromJson(result, Mood.class);

Мои кластерные структуры похожи на это.

public class Mood {

    private boolean is_featured;
    private boolean is_recently_modified;
    private boolean is_recently_created;
    private boolean is_test;


    private String  description;
    private String  title;
    private String  image_url;

    private int     id;
    private int     ordering;

    private Track[] tracks;



    public static class MoodContainer {
        public Mood[] moods;
    }


}


public class Track {

    //variables
    private Album       album;
    private Artist      artist;
    private Provider    provider;


    private String      secure_url;
    private String      name;
    private String      region;
    private String      isrc;

    private int         duration;
    private int         track_order;
    private int         id;

}

И так происходит для любой дополнительной переменной класса. Когда я пытаюсь использовать вышеупомянутый вызов, я получаю объекты с всеми нулевыми значениями. Одно замечание - некоторые поля не добавляются в строку json, потому что разные вызовы api предоставляют разные части этих строк json. Что я делаю неправильно?

Теги:
gson

2 ответа

3
Лучший ответ

Объект Root JSON, который вы предоставили, имеет свойство mood - так что у вас есть два варианта десериализации для правильной работы:

  1. Оберните свой класс Mood внутри другого объекта следующим образом:

    public class MoodWrapper { private Mood mood; }

    и изменить код де-сериализации на

    MoodWrapper moodWrapper = new Gson().fromJson(result, MoodWrapper.class);

  2. Пропустить корневой объект при десериализации:

    final Gson gson = new Gson();
    JsonParser parser = new JsonParser();
    JsonObject rootObj = parser.parse(json).getAsJsonObject();
    Mood mood = gson.fromJson(rootObj.getAsJsonObject("mood"), Mood.class);
    
1

Элементами верхнего уровня в строке JSON должны быть ваши свойства объекта, а не внешний элемент "настроение", который у вас есть.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню