如何用Java解析此JSON数据

时间:2019-02-07 20:52:31

标签: java json parsing

这是我需要导入到JAVA变量中的JSON数据

{   “世界”:{     “ -61,66”:“ 1”,     “ -62,66”:“ 2”   } }

我已经尝试过标准教程,但是它们都需要作者控制的格式化JSON文件。在这种情况下,我不是。 为了解决这个问题,需要使用名为FactionsUUID的Minecraft插件,该插件将玩家要求的地图块存储在x和z的网格编号块中,因此将“ -61,66”对齐到“ x,z”和“ 1” “和” 2“与另一个不需要交叉索引的JSON文件中的Faction ID引用对齐。我只需要能够在我的代码中按Faction ID分隔声明即可。

世界是一个对象,但是我无法获取下面的项目来解析为数组。

@SuppressWarnings("unchecked")
public static void main() {
    JSONParser parser = new JSONParser();

    try {

        Object obj = parser.parse(new FileReader(
                "C:\\TestServer\\jar\\plugins\\Factions\\board.json"));

        JSONObject jsonObject = (JSONObject) obj;

(错误下方的第59行) JSONArray theworld =(JSONArray)jsonObject.get(“ world”);

       Iterator<String> iterator = theworld.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
            Main.logToFile("FTOP-> " + iterator.next());
        }

    } catch (Exception e) {
        e.printStackTrace();
   }
}

[14:51:16 WARN]:java.lang.ClassCastException:org.json.simple.JSONObject无法转换为org.json.simple.JSONArray [14:51:16 WARN]:位于com.ljd.perditionfcore.events.FTOPScan.main(FTOPScan.java:59) [14:51:16 WARN]:位于com.ljd.perditionfcore.Main.onEnable(Main.java:35) [14:51:16 WARN]:位于org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:321) [14:51:16 WARN]:位于org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:332) [14:51:16 WARN]:位于org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:404) [14:51:16 WARN]:位于org.bukkit.craftbukkit.v1_8_R3.CraftServer.loadPlugin(CraftServer.java:313) [14:51:16 WARN]:位于org.bukkit.craftbukkit.v1_8_R3.CraftServer.enablePlugins(CraftServer.java:272) [14:51:16 WARN]:位于org.bukkit.craftbukkit.v1_8_R3.CraftServer.reload(CraftServer.java:726) [14:51:16 WARN]:位于org.bukkit.Bukkit.reload(Bukkit.java:556) [14:51:16 WARN]:位于org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:25) [14:51:16 WARN]:位于org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:143) [14:51:16 WARN]:位于org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:619) [14:51:16 WARN]:位于org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchServerCommand(CraftServer.java:582) [14:51:16 WARN]:位于net.minecraft.server.v1_8_R3.DedicatedServer.aO(DedicatedServer.java:416) [14:51:16 WARN]:位于net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:379) [14:51:16 WARN]:位于net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:715) [14:51:16 WARN]:位于net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:618) [14:51:16 WARN]:位于java.lang.Thread.run(未知来源)

2 个答案:

答案 0 :(得分:5)

jsonObject.get("world")返回一个对象({ "-61,66": "1", "-62,66": "2" }),因此您可能希望遍历结果对象的键集:

Map<String, String> map = new HashMap<String, String>();
map.put("-61,66", "1");
map.put("-62,66", "2");

JSONObject obj = new JSONObject(); // obj =  {"world":{"-61,66":"1","-62,66":"2"}}
obj.put("world", new JSONObject(map));

JSONObject worldObject = obj.getJSONObject("world");

Set<String> keySet = worldObject.keySet(); // keySet = [-61,66, -62,66]

System.out.println(worldObject.keySet());
for (String key : keySet) {
    System.out.println(worldObject.get(key)); // returns 1 and then 2
}

答案 1 :(得分:-3)

您的数据无效,请确保检查您可以解析的数据。

问题出在这行代码中:

JSONObject jsonObject = (JSONObject) obj;

适合您的情况是

JSONArray jsonArray = (JSONArray) obj;