Gson 调用在多个类上返回空对象

Ogu*_*ner 1 java json gson

我正在尝试序列化以序列化我在下面包含的 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
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用这个 gson 调用来序列化它

Mood mood = new Gson().fromJson(result, Mood.class);
Run Code Online (Sandbox Code Playgroud)

我的班主任是这样的。

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;

}
Run Code Online (Sandbox Code Playgroud)

对于任何额外的类变量,它都会像这样继续下去。当我尝试使用上面的调用时,我最终得到的对象都是空值。需要注意的一件事是 json 字符串中未提供某些字段,因为不同的 api 调用提供了这些 json 字符串的不同部分。我做错了什么?

Pri*_*osK 5

您提供的根 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);
    
    Run Code Online (Sandbox Code Playgroud)