0

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

4

2 回答 2

0

添加字段

private Profile profile;

public Profile getProfile() { return profile; }

到外面的班级JsonParser。然后你可以使用

jp.getProfile().getLast_name();

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

于 2012-08-03T09:07:27.893 回答
0

首先删除

final JsonParser outer = JsonParser.this; 

从你的代码。这是一个非法构造,因为this不能从静态上下文中引用。

然后加

private Profile profile;

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

有了这个成员,GSon 解析器将在您调用gson.fromJson(...).

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

于 2012-08-03T09:17:10.847 回答