使用GSON进行JSON解析 - 设置类层次结构

时间:2012-05-17 01:35:44

标签: android json gson

我无法理解如何使用GSON为JSON转换设置类层次结构。

我的JSON看起来像:

{
  "Users": {
    "id": 1,
    "name": "Jim",
    "location": "Huntsville"
  }
}

我的用户列表类似乎:

public class UserList {
  public static List<User> Users;

  @SuppressWarnings("static-access")
  public void setUserList(List<User> userList){
      this.Users = userList;
  }

  public List<User> getUserList(){
      return Users;
  }

}

最后是一个如下所示的用户类:

public class User {
  private int id;

  private String name;

  private String location;

  public int getId(){
      return id;
  }

  public String getName(){
      return name;
  }

  public String getLocation(){
      return location;
  }

  public String toString(){
      return("User: [id=" + id + "], [name=" + name + "], [location=" + location + "]");
  }

}

有人介意给我一个正确的方向吗?我很感激!

编辑:

忘记显示我的解析代码..(只是从SDCard读取示例JSON文件)

        BufferedReader br = new BufferedReader(new FileReader(Environment.getExternalStorageDirectory() + "/user.json"));
        UserList userList = gson.fromJson(br, UserList.class);

1 个答案:

答案 0 :(得分:1)

你确定你的JSON示例是正确的吗? 它似乎不是一个列表,只定义了一个用户。

此外,用户的getter和setter应该遵循get / set模式并被称为

public List<User> getUsers()
public void setUsers(List<User> users)

此外,您可以遵循小案例的Java惯例并指示Gson使用不同的大小写。 假设您的JSON中只有一个Users条目。如果您将Users属性更改为User而不是列表,则可以解析您提供的snippit。

@SerializedName("Users")
private User user;

因此,如果你想要一个用户列表,你应该在json中找到它,这应该让你把它解析为一个列表,注意你需要有对象,这些对象是封闭的,如:

{"users" : [{id:"one"}, ...]}

正如评论中指出的那样。