Я пытаюсь сериализовать сериализацию строки 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. Что я делаю неправильно?
Объект Root JSON, который вы предоставили, имеет свойство mood
- так что у вас есть два варианта десериализации для правильной работы:
Оберните свой класс Mood
внутри другого объекта следующим образом:
public class MoodWrapper { private Mood mood; }
и изменить код де-сериализации на
MoodWrapper moodWrapper = new Gson().fromJson(result, MoodWrapper.class);
Пропустить корневой объект при десериализации:
final Gson gson = new Gson();
JsonParser parser = new JsonParser();
JsonObject rootObj = parser.parse(json).getAsJsonObject();
Mood mood = gson.fromJson(rootObj.getAsJsonObject("mood"), Mood.class);
Элементами верхнего уровня в строке JSON должны быть ваши свойства объекта, а не внешний элемент "настроение", который у вас есть.