使用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方法。