Java JSON加载返回Null

时间:2018-01-24 23:24:26

标签: java json loading

我一直在研究这个问题已经太久了,我想我只是在做一些愚蠢的GSON,不太确定。我的调试表明它使它成为map = builder.fromJson方法,但它仍然返回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

所以这看起来对我来说。

下面是调用加载所有“传送带”的方法。对象

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课程,我不确定我做错了什么,所有的建议表示赞赏!如果您有任何问题,请告诉我们!

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方法即使在我知道它读取文件后也返回null。 GSON

1 个答案:

答案 0 :(得分:1)

fromJson方法需要ReaderJsonReaderJsonElementString,并将您的实际JSON数据作为第一个参数,但是您通过"teleport-load"。试着像这样称呼它:

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

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