2011-03-15 38 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