2012-08-03 15 views
0

我試圖從反序列化的json對象的內部類訪問變量。以下是我用過的代碼。使用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對象訪問姓氏在配置文件中的內部類?

回答

0

private Profile profile; 

public Profile getProfile() { return profile; } 

添加外部類JsonParser。然後你可以使用

jp.getProfile().getLast_name(); 

注:名稱JsonParser是混亂的,因爲它沒有任何解析 - 它存儲解析結果。將它重命名爲Config或類似的東西。

+0

謝謝。它已經解決了 – Vincey 2012-08-03 09:34:51

0

首先從代碼中刪除

final JsonParser outer = JsonParser.this; 

。這是一個非法的構造,因爲this不能從靜態上下文中引用。

然後右鍵低於其他成員一樣的用戶名,祕密,...

有了這個成員到位GSON解析器將填補它的定義添加

private Profile profile; 

您JsonParser類的致電gson.fromJson(...)

您可以添加一個getter方法從外部訪問您的子結構。