使用Gson将Json转换为Java对象

我目前正在开发一个使用Steam Web API的项目。 API以JSON格式返回数据,我想制作一个使用这些数据的Java程序。 以下是API中的以下JSON格式:

{ "response": { "players": [ { "steamid": "---", "communityvisibilitystate": 1, "profilestate": 1, "personaname": "---", "lastlogoff": 1429915502, "profileurl": "---", "avatar": "---", "avatarmedium": "---", "avatarfull": "---", "personastate": 0 } ] } } 

我正在使用谷歌的JSON API,名为Gson,我在设置Java类时遇到问题,因此我可以使用fromJson()方法。

从JSON数据中,我知道有一个包含所有数据的players对象数组。 令我困惑的一件事是外部标签叫做response 。 我知道我必须构建一个代表players对象的类,但是我还必须创建一个代表response的类,因为它包含了players吗?

截至目前,我有一个名为Response.java的文件,其中包含以下内容:

 public class Response { private ArrayList playerSummaries = new ArrayList(); public String toString() { return playerSummaries.get(0).toString(); } } class Player { private String steamid; private String personaname; public String getSteamID() { return steamid; } public void setSteamID(String newSteamID) { steamid = newSteamID; } public String getPersonaName() { return personaname; } public void setPersonaName(String name) { personaname = name; } //Rest of getters and setters omitted. @Override public String toString() { return "<>"; } } 

我只包括了我打算使用的变量。 上面的JSON数据包含在一个名为jsonData的String中,这就是我在main方法中测试的内容:

 Response response = gson.fromJson(jsonData, Response.class); System.out.println(response.getPlayerAt(0)); 

但是,运行它会给我一个IndexOutOfBoundsException。 好像Gson无法获取信息并将其存储到对象中? 有人能解释一下我遇到的这个问题吗? 我很想知道我是否正确设置了我的课程。

更换

 private ArrayList playerSummaries = new ArrayList(); 

 private ArrayList players = new ArrayList(); 

GSON使用reflection来查找它应该填充的字段。 在你的情况下,它正在查找你是否有一个你没有的名为players的领域。

您也不需要实例化该字段,GSON会为您执行此操作。

编辑:

您还需要一个围绕顶级对象的包装类。 所以

 class MyObject { public Response response; } MyObject myObject = gson.fromJson(jsonData, MyObject.class); 

你为什么用

 System.out.println(response.getPlayerAt(0)); 

你应该用

 response.getPlayerSummaries.get(0); 

其中getPlayers是你的吸气剂

  private ArrayList playerSummaries = new ArrayList(); 

getPlayerSummaries将获得arraylist,然后你将使用arraylist类的get方法。