我目前正在使用Steam Web API的項目中工作。 API以JSON格式返回數據,我想製作一個使用這些數據的Java程序。下面是從API以下JSON格式:使用Gson將Json轉換爲Java對象
{
"response": {
"players": [
{
"steamid": "---",
"communityvisibilitystate": 1,
"profilestate": 1,
"personaname": "---",
"lastlogoff": 1429915502,
"profileurl": "---",
"avatar": "---",
"avatarmedium": "---",
"avatarfull": "---",
"personastate": 0
}
]
}
}
我使用谷歌的API JSON稱爲GSON和我有麻煩設置Java類,這樣我就可以使用fromJson()
方法。
從JSON數據中,我知道有一個包含所有數據的對象數組。令我困惑的一件事是外部標籤response
。我知道我必須構建一個代表players
對象的類,但是我還必須創建一個代表response
的類,因爲它包含了players
?
截至目前,我有一個名爲Response.java
文件,該文件包含以下內容:
public class Response {
private ArrayList<Player> playerSummaries = new ArrayList<Player>();
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 "<<" + "steamid=" + steamid + "\n" + "name=" + personaname + "\n" + ">>";
}
}
我只包括我打算使用的變量。上面字符串中包含的JSON數據稱爲jsonData
,這是我在我的主要方法正在測試:
Response response = gson.fromJson(jsonData, Response.class);
System.out.println(response.getPlayerAt(0));
但是,在運行這給了我IndexOutOfBoundsException異常。似乎Gson無法獲取信息並將其存儲到一個對象中?任何人都可以解釋我遇到的這個問題嗎?我很想知道我是否正確設置了課程。
是否要返回索引0處的播放器或迭代整個數組列表? – kirti
當談到編寫與JSON模式相匹配的POJO類時,我發現將我的代碼與在線工具自動生成的代碼進行比較非常有用,例如http://www.jsonschema2pojo.org/ – Javide
@kirti我只返回玩家在索引0處用於測試目的。 –