如何用Java解析这个JSON数据

-3 java parsing json

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

{"world":{" - 61,66":"1"," - 62,66":"2"}}

我已经尝试过标准教程,但是它们都需要一个格式化的JSON文件,作者可以在其中控制.在这种情况下,我不是.为了打破这一点,它是针对名为FactionsUUID的Minecraft插件,它将玩家声称他们的阵营的地图块存储到x和z的网格数字块中,因此"-61,66"将它们对齐到"x,z"和"1" "和"2"与另一个JSON文件中的Faction ID引用对齐,该文件现在不需要交叉索引.我只需要能够在我的代码中通过Faction ID分隔声明.

世界是一个对象,但我无法得到下面的项目来解析成一个数组.

{
  "world": {
    "-61,66": "1",
    "-62,66": "2"
  }
}
Run Code Online (Sandbox Code Playgroud)

(来自以下错误的第59行)JSONArray theworld =(JSONArray)jsonObject.get("world");

    @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;

(LINE 59 from Error below)
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();
       }
    }
Run Code Online (Sandbox Code Playgroud)

[14:51:16警告]:java.lang.ClassCastException:org.json.simple.JSONObject无法强制转换为org.json.simple.JSONArray [14:51:16 WARN]:at com.ljd.perditionfcore.events .FTOPScan.main(FTOPScan.java:59)[14:51:16警告]:at com.ljd.perditionfcore.Main.onEnable(Main.java:35)[14:51:16 WARN]:at org.bukkit .plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:321)[14:51:16 WARN]:at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:332)[14:51:16 WARN ]:at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:404)[14:51:16 WARN]:at 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]:at org.bukkit.craftbukkit.v1_8_R3.CraftServer.reload(CraftServer.java :726)[14:51:16警告]:在org.bukkit.Bukkit.reload(Bukkit.java:556)[14:51:16警告]:at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand的.java:25)[14:51:16警告]:在org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:143)[14:51:16警告]:at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer. java:619)[14:51:16警告]:at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchServerCommand(CraftServer.java:582)[14:51:16 WARN]:at net.minecraft.server.v1_8_R3. DedicatedServer.aO(DedicatedServer.java:416)[14:51:16警告]:在net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:379)[14:51:16警告]:在网上. minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:715)[14:51:16 WARN]:at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:618)[14:51:16警告]:在java.lang.Thread.run(未知来源)

小智 5

jsonObject.get("world")返回一个object({ "-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
}
Run Code Online (Sandbox Code Playgroud)