我一直在研究这个问题已经太久了,我想我只是在做一些愚蠢的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");
}
}
保存方法输出
所以这看起来对我来说。
下面是调用加载所有“传送带”的方法。对象
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
答案 0 :(得分:1)
fromJson
方法需要Reader
,JsonReader
,JsonElement
或String
,并将您的实际JSON数据作为第一个参数,但是您通过"teleport-load"
。试着像这样称呼它:
map = gson.fromJson(reader.get("teleport-load"), Teleport[].class);
在这种情况下,reader.get("teleport-load")
将返回代表JsonElement
属性的teleport-load
,然后fromJson
会将其转换为Teleport[]
数组。