Java JSON 正在加载 Returns 空

Java JSON Loading Returns Null

我在这方面工作的时间太长了,我想我只是在用 GSON 做一些愚蠢的事情,不太确定。我的调试表明它进入了 map = builder.fromJson 方法,但它仍然是 returns null.

保存和加载方法

public static void saveTeleportData() {
    Path path = Paths.get("./data/definitions/teleports.json");
    File file = path.toFile();
    file.getParentFile().setWritable(true);

    if (!file.getParentFile().exists()) {
        try {
            file.getParentFile().mkdirs();
        } catch (SecurityException e) {
            System.out.println("Unable to create directory for Teleport data!");
        }
    }
    try (FileWriter writer = new FileWriter(file)) {

        Gson builder = new GsonBuilder().setPrettyPrinting().create();
        JsonObject object = new JsonObject();

        object.add("teleport-load", builder
                .toJsonTree(***Teleport Object Array***));

        writer.write(builder.toJson(object));
        writer.close();

    } catch (Exception e) {
        System.out.println("Failure");
    }
}

保存方法输出这个

https://pastebin.com/D5VpJXAj

所以这对我来说很合适。

这是调用所有 'Teleport' 对象的方法

public static Teleport[] loadTeleports() {

    // Create the path and file objects.
    Path path = Paths.get("./data/definitions/teleports.json");
    File file = path.toFile();

    // Now read the properties from the json parser.
    Teleport[] map = null;
    try (FileReader fileReader = new FileReader(file)) {
        JsonParser fileParser = new JsonParser();
        Gson builder = new GsonBuilder().create();
        JsonObject reader = (JsonObject) fileParser.parse(fileReader);

        if (reader.has("teleport-load")) {
            map = builder.fromJson("teleport-load", Teleport[].class);
            return map;
        }
    } catch (Exception e) {
        return null;
    }
    return map;
}

这也是我的 Teleport Class,我不确定我做错了什么,感谢所有建议!如果您有任何问题,请告诉我!

public class Teleport {

    private final String name;

    private final Position position;

    private final TeleportGroups teleGroup;

    public Teleport(String name, Position position, TeleportGroups teleGroup) {
        this.name = name;
        this.position = position;
        this.teleGroup = teleGroup;
    }

    public String getName() {
        return name;
    }

    public Position getPosition() {
        return position;
    }

    public TeleportGroups getTeleType() {
        return teleGroup;
    }

}

TL;DR - 即使我知道它正在读取文件,我的 loadTeleports 方法 returns 还是 null。 GSON

fromJson 方法需要 ReaderJsonReaderJsonElementString 以及您的实际 JSON 数据第一个参数,但你传递 "teleport-load"。尝试这样称呼它:

map = gson.fromJson(reader.get("teleport-load"), Teleport[].class);

在这种情况下 reader.get("teleport-load") 将 return 表示 teleport-load 属性 的 JsonElement 然后 fromJson 将其转换为 Teleport[]数组.