[英]Using Gson to convert Json into Java Object
我目前正在开发一个使用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<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
的String中,这就是我在main方法中测试的内容:
Response response = gson.fromJson(jsonData, Response.class);
System.out.println(response.getPlayerAt(0));
但是,运行它会给我一个IndexOutOfBoundsException。 好像Gson无法获取信息并将其存储到对象中? 谁能解释一下我遇到的这个问题? 我很想知道我是否正确设置了我的课程。
更换
private ArrayList<Player> playerSummaries = new ArrayList<Player>();
同
private ArrayList<Player> players = new ArrayList<Player>();
GSON使用反射来查找它应该填充的字段。 在你的情况下,它正在查找你是否有一个你没有的名为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是你的getter
private ArrayList<Player> playerSummaries = new ArrayList<Player>();
getPlayerSummaries将获得arraylist,然后你将使用arraylist类的get方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.