2011-03-15 68 views
16

我想我的Json加載到我班JSON GSON.fromJson Java對象

public User() { 
    this.fbId = 0; 
    this.email = ""; 
    this.name = ""; 
    this.thumb = ""; 
    this.gender = ""; 
    this.location = ""; 
    this.relationship = null; 
    this.friends = new ArrayList(); 
} 
{ 
    users:{ 
     user:{ 
      name:'the name', 
      email:'[email protected]', 
      friends:{ 
       user:{ 
        name:'another name', 
        email:'[email protected]', 
        friends:{ 
         user:{ 
          name:'yet another name', 
          email:'[email protected]' 
         } 
        } 
       } 
      } 
     } 
    } 
} 

我努力讓GSON用戶信息加載到上述Java對象用下面的代碼

User user = gson.fromJson(this.json, User.class); 
+5

這是XML,JSON不,夥計。 ...好的,你編輯了你的問題。向我們展示JSON!另外,這是一個構造函數,而不是一個類。 – 2011-03-15 16:33:41

+0

對不起有代碼段的惡夢lol – Deviland 2011-03-15 16:35:30

+0

閱讀http://stackoverflow.com/editing-help。這只是Markdown。 – 2011-03-15 16:36:15

回答

29

JSON無效。集合不應由{}表示。它代表對象。集合/數組將由[]與逗號分隔的對象表示。

這裏的JSON看起來應該像:

{ 
    users:[{ 
     name: "name1", 
     email: "email1", 
     friends:[{ 
      name: "name2", 
      email: "email2", 
      friends:[{ 
       name: "name3", 
       email: "email3" 
      }, 
      { 
       name: "name4", 
       email: "email4" 
      }] 
     }] 
    }] 
} 

(注意,我增加了一個朋友嵌套最深的朋友,讓您瞭解如何在集合中指定多個對象)

鑑於這種JSON,你的包裝類應該是這樣的:

public class Data { 
    private List<User> users; 
    // +getters/setters 
} 

public class User { 
    private String name; 
    private String email; 
    private List<User> friends; 
    // +getters/setters 
} 

,然後將其轉換,使用

Data data = gson.fromJson(this.json, Data.class); 

,並得到了用戶的使用

List<User> users = data.getUsers(); 
+0

感謝Balus C你我使用了一個工具來將我的測試數據從XML轉換爲JSON,這是我必須學習的教訓不要相信第三方網站來做我應該做的工作。 – Deviland 2011-03-15 16:55:32

+0

嗨 大家在解決方案中使用了這個: gson.fromJson(this.json,User.class); 我想知道這是什麼this.json。它是一個json對象或什麼?如果它是一個硬編碼的json對象,那麼我們應該在哪裏創建該對象以使用this.json訪問它? – Piscean 2011-06-14 11:39:15

+1

@Piscean:它只是輸入的JSON字符串。另請參閱原始問題和Gson手冊。如果無法確定,只需按右上方的「詢問問題」按鈕即可。 – BalusC 2011-06-14 11:45:55