0

我想使用 Gson 将我的 JSON 反序列化为对象。我已经定义了适当的类,其中一些类的对象包含在其他对象中。当试图反序列化整个 JSON 时,我得到了空值,所以我开始将它分开。

我达到了所有低级类都支持他们自己的地步,但是当试图反序列化为一个包含该较小对象实例的对象时 - 每件事都返回为空。

我的部分 JSON:

{
  "user_profile": {
    "pk": 1,
    "model": "vcb.userprofile",
    "fields": {
      "photo": "images/users/Screen_Shot_2013-03-18_at_5.24.13_PM.png",
      "facebook_url": "https://google.com/facebook",
      "site_name": "simple food",
      "user": {
        "pk": 1,
        "model": "auth.user",
        "fields": {
          "first_name": "blue",
          "last_name": "bla"
        }
      },
      "site_url": "https://google.com/"
    }
  }
}

用户配置文件类:

public class UserProfile {
    private int pk;
    private String model;
    private UPfields fields = new UPfields();//i tried with and without the "new"
}

UPfields 类:

public class UPfields {
    private String photo;
    private String facebook_url;
    private String site_name;
    private User user;
    private String site_url;
}

用户等级:

public class User {
    private int pk;
    private String model;
    private Ufields fields;
}

Ufields类:

public class Ufields {
    private String first_name;
    private String last_name;
}

在我的主要我打电话:

Gson gson = new Gson();
UserProfile temp = gson.fromJson(json, UserProfile.class);

所以我的临时对象只包含空值。我尝试将类更改为静态,但它不起作用。UPfields 对象和所有较低的对象都可以正常工作。

有什么建议么?

当我删除

"{
  "user_profile":"

它是右括号,反序列化为 user_profile 对象有效。

4

2 回答 2

2

为了解析这个json例子,你必须创建辅助类,它将包含名为user_profiletype 的字段UserProfile

public class UserProfileWrapper {
    private UserProfile user_profile;
}

并用这个类解析这个json字符串:

UserProfileWrapper temp = gson.fromJson(json, UserProfileWrapper.class);
于 2013-07-16T12:54:27.817 回答
0

Gson 首先解析最外面的对象,在您的情况下,该对象有一个字段user_profile. 您的UserProfile类没有user_profile字段,因此无法将其反序列化为该类的实例。您应该尝试反序列化该字段的值。user_profile

于 2013-07-16T13:05:25.190 回答