从JSON文件获取int
我有一个JSON文件解析问题。我必须从JSON文件中获取一个int(在这种情况下是播放器Speedys的factionId)。我已经使用这段代码,但它不工作..那有什么问题? http://pastebin.com/7gvhHpSz从JSON文件获取int
public static JsonObject convertFileToJSON (String fileName){
// Read from File to String
JsonObject jsonObject = new JsonObject();
try {
JsonParser parser = new JsonParser();
JsonElement jsonElement = parser.parse(new FileReader(fileName));
jsonObject = jsonElement.getAsJsonObject();
} catch (FileNotFoundException e) {
}
return jsonObject;
}
public static String getJsonString(JsonObject json, String path) {
String[] parts = path.split("\\.");
JsonObject next = null;
if (parts.length == 1) {
return json.get(parts[0]).getAsString();
}
for (int i = 0; i < parts.length; i++) {
if (next == null) {
next = json.getAsJsonObject(parts[i]);
continue;
}
if (i == (parts.length - 1)) {
return next.get(parts[i]).getAsString();
}
else {
next = next.getAsJsonObject(parts[i]);
}
}
return null;
}
public boolean onCommand(CommandSender sender, Command cmd, String label,
String[] args) {
Player player = (Player) sender;
if (cmd.getName().equalsIgnoreCase("myfp")) {
if (args.length == 0) {
//do something
} else if (args[0].equalsIgnoreCase("pacifica")) {
JsonObject object = convertFileToJSON ("plugins/Factions/players.json");
int number = getJsonString(object, "Speedys.factionId");
Bukkit.broadcastMessage(text);
}
}
return false;
}
我使用GSON和Bukkit。
{
"Speedys": {
"factionId": "148",
"role": "ADMIN",
"title": "",
"power": 8.948716666666668,
"powerBoost": 0.0,
"lastPowerUpdateTime": 1425205197880,
"lastLoginTime": 1425205197880,
"chatMode": "PUBLIC"
},
"stobbie511": {
"factionId": "0",
"role": "NORMAL",
"title": "",
"power": 0.7870366666666667,
"powerBoost": 0.0,
"lastPowerUpdateTime": 1425233475349,
"lastLoginTime": 1425233475349,
"chatMode": "PUBLIC"
},
"demonofloom": {
"factionId": "265",
"role": "NORMAL",
"title": "",
"power": -10.0,
"powerBoost": 0.0,
"lastPowerUpdateTime": 1425304265606,
"lastLoginTime": 1425300330188,
"chatMode": "PUBLIC"
}
}
结果应该是“148”。
打印出来的错误是:
java.lang.ClassCastException: org.json.simple.JSONObject cannot be cast to java.lang.String
小例子,对于GSON使用解析:
Gson gson = new Gson();
Speedys speedy = gson.fromJson(String.valueOf("YOUR JSON OBJECT"), Speedys.class);
int n = speedy.getlastLoginTime();
而且Speedys类:
public class Speedys {
@SerializedName("factionId")
private String factionId;
@SerializedName("lastLoginTime")
private int lastLoginTime;
public String getFactionId() {
return factionId;
}
public void setFactionId(String factionId) {
this.factionId = factionId;
}
public int getlastLoginTime() {
return lastLoginTime;
}
public void setlastLoginTime(int lastLoginTime) {
this.lastLoginTime = lastLoginTime;
}
是的,但“Speedys”是随机用户的用户名。我指出的文件是充满了用户,我需要从用户X得到int – 2015-03-02 17:33:32
是JSON对象的JSONArray的权利? – 2015-03-02 17:34:39
我用json文件中的更多条目编辑了主线程。 – 2015-03-02 17:36:17
可以在编写代码解析? – 2015-03-02 17:25:53
它不起作用?预期的结果和实际发生了什么?你有例外吗?如果是这样,请将其添加到您的问题。 – 2015-03-02 17:28:23
@AntonioBalduzzi你能帮我吗 – 2015-03-02 17:48:46