【问题标题】:Obtaining inner class variable from deserialized json using gson使用gson从反序列化的json中获取内部类变量
【发布时间】:2012-08-03 08:54:56
【问题描述】:

我正在尝试从反序列化的 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?

【问题讨论】:

    标签: java json oop deserialization gson


    【解决方案1】:

    添加字段

    private Profile profile;
    
    public Profile getProfile() { return profile; }
    

    到外部类JsonParser。然后就可以使用了

    jp.getProfile().getLast_name();
    

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

    【讨论】:

      【解决方案2】:

      先删除

      final JsonParser outer = JsonParser.this; 
      

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

      然后添加

      private Profile profile;
      

      到您的 JsonParser 类,就在其他成员(如用户名、密码等)的定义下方...

      有了这个成员,GSon 解析器将在您致电gson.fromJson(...) 时填充它。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多