我正在使用简单的JSON库为TF2编写匹配日志分析仪。代码成功获取所有日志ID,但无法进入实际日志本身。错误是
线程" main" java.lang.classcastException中的例外: org.json.simple.jsonobject不能被施加到org.json.simple.jsonarray
但是,在代码中,我已经对数组施放了一个对象。这是代码的片段,其中Parsejson返回JSONOBJECT和LOGIDLIST包含所有日志ID的列表:
JSONArray playerData = (JSONArray)parseJSON("http://logs.tf/json_search?player=" + steamID64).get("logs");
//....
JSONArray tempJSONArray = (JSONArray)parseJSON("http://logs.tf/json/" + logIDList.get(j)).get("players");
第二次铸造JsonObject的尝试始终丢弃铸造错误。Parsejson使用Intellij的调试器成功解析了JSON并返回多个键。
第一个JSON文件是这样的:
{
"logs": [
{
"date": 1512093930,
"id": 1893064,
"title": "UGC 6v6 Match: RED vs -rep"
},
],
}
第二个JSON文件是这样的:
{
"players" : {
"[U:1:61383870]":{(Player Stats)}
},
}
我的假设是由于键内有一个键或类似的东西吗?不确定为什么这告诉我我不能将其施加给数组,当我使用另一个Jonobject进行时。
您正在从对象到数组降低。如果实例确实是一个数组,则可以工作,如果不是数组,则会失败(例如地图)。通常,您应该始终使用Instance Off进行检查,例如:
JSONArray playerData;
JSONObject playerJson = parseJSON("http://logs.tf/json_search?player=" + steamID64).get("logs");
if (playerJson instanceof JSONArray) {
playerData = (JSONArray) playerJson;
} else {
throw new IllegalStateException("wrong Json type " + playerJson)
}
从您发布的JSON中可以看到:
"logs": [ ...]
日志是一个数组,
"players" : { ... }
玩家是地图。
,因为您已经看到的jsonobject是一种映射,因此您不能简单地将其施加到JSONARRAY。对于此,您可以创建JSONARRAY,然后继续进行。要创建jsonobject到jsonarray,您可以使用:
JSONArray JSONFirewallRules = jsonObject.getJSONArray(jsonStrings.REQUEST_RULES_ALL_RESPONSE);