使用gson从反序列化的json中获取内部类变量

时间:2012-08-03 08:54:57

标签: java json oop deserialization gson

我正在尝试从反序列化的json对象的内部类中访问变量。以下是我用过的代码。

package jsonparser;

public class JsonParser {

private long uid = 0;
private String username, secret, filter, machine_id, access_token,
        session_key = null;


    public JsonParser() {

     }

     public static class Profile {
        private String last_name, first_name, pic_square, name = null;
        private long uid = 0;
        final JsonParser outer = JsonParser.this;

         public String getLast_name() {
        return last_name;
         }

         public void setLast_name(String last_name) {
            this.last_name = last_name;
         }

         public String getFirst_name() {
         return first_name;
         }

         public void setFirst_name(String first_name) {
          this.first_name = first_name;
         }

             public String getPic_square() {
           return pic_square;
         }

         public void setPic_square(String pic_square) {
          this.pic_square = pic_square;
         }

         public String getName() {
         return name;
         }

         public void setName(String name) {
         this.name = name;
         }

         public long getUid() {
        return uid;
         }

         public void setUid(long uid) {
        this.uid = uid;
         }

         public Profile() {
         }
       }
}

在另一堂课中:

JsonParser jp = gson.fromJson(Data, JsonParser.class);

数据如下所示:

{
    "uid": 123,
    "username": "Hello",
    "secret": "87920",
    "filter": "nf",
    "machine_id": "machine_id",
    "access_token": "access_token",
    "session_key": "123e",
    "profile": {
        "last_name": "Tan",
        "uid": 123,
        "first_name": "Sally",
        "pic_square": "url.jpg",
        "name": "Sally Tan"
    }
}

我如何能够从jp对象访问配置文件内部类中的last_name?

2 个答案:

答案 0 :(得分:0)

添加字段

private Profile profile;

public Profile getProfile() { return profile; }

到外层JsonParser。然后你可以使用

jp.getProfile().getLast_name();

注意:名称JsonParser令人困惑,因为它不会解析任何内容 - 它会存储解析结果。将其重命名为Config或类似的内容。

答案 1 :(得分:0)

首先删除

final JsonParser outer = JsonParser.this; 

来自您的代码。这是一种非法构造,因为无法从静态上下文引用this

然后添加

private Profile profile;

到JsonParser类的正下方,其他成员的定义如username,secret,...

有了这个成员,GSon Parser将在您致电gson.fromJson(...)时填写。

您可以添加一个getter方法来从外部访问您的子结构。