【问题标题】:How to parse this JSON Data in Java如何在 Java 中解析这个 JSON 数据
【发布时间】:2019-02-07 20:52:30
【问题描述】:

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

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

我已经尝试过标准教程,但是它们都需要作者可以控制的格式化 JSON 文件。在这种情况下,我不是。 为了打破这一点,它是用于名为 FactionsUUID 的 Minecraft 插件,它将玩家为其派系声称的地图块存储到 x 和 z 的网格编号块中,因此它们与“x,z”和“1”对齐的“-61,66” " 和 "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;

(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();
       }
    }
[14:51:16 WARN]: java.lang.ClassCastException: org.json.simple.JSONObject cannot be cast to org.json.simple.JSONArray
[14:51:16 WARN]:        at com.ljd.perditionfcore.events.FTOPScan.main(FTOPScan.java:59)
[14:51:16 WARN]:        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]:        at 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 WARN]:        at org.bukkit.Bukkit.reload(Bukkit.java:556)
[14:51:16 WARN]:        at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:25)
[14:51:16 WARN]:        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:143)
[14:51:16 WARN]:        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:619)
[14:51:16 WARN]:        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 WARN]:        at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:379)
[14:51:16 WARN]:        at net.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 WARN]:        at java.lang.Thread.run(Unknown Source)

【问题讨论】:

  • 您的 JSON 中没有数组,因此您无法将其转换为一个。 ({...} 表示对象,[...] 表示数组)。

标签: java json parsing


【解决方案1】:

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
}

【讨论】:

    【解决方案2】:

    您的数据无效,请务必检查您可以解析的数据。

    问题出在这行代码中:

    JSONObject jsonObject = (JSONObject) obj;

    对你的情况有用的是

    JSONArray jsonArray = (JSONArray) obj;

    【讨论】:

    • JSON 不包含数组。 JSON 中没有 []
    猜你喜欢
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 2013-09-24
    • 1970-01-01
    • 2022-12-02
    • 2020-08-27
    • 2022-01-16
    • 1970-01-01
    相关资源
    最近更新 更多