gpt4 book ai didi

Java JSON 加载返回 Null

转载 作者:行者123 更新时间:2023-11-30 06:19:40 25 4
gpt4 key购买 nike

我在这方面工作了太长时间,我想我只是用 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;
}

这也是我的传送类,我不确定我可能做错了什么,感谢所有建议!如果您有任何疑问,请告诉我!

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

最佳答案

fromJson 方法需要一个 Reader、一个 JsonReader、一个 JsonElement 或一个 String 将您的实际 JSON 数据作为第一个参数,但您传递 "teleport-load"。尝试这样调用它:

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

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

关于Java JSON 加载返回 Null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48433326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com