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");
}
}
保存方法输出这个
所以这对我来说很合适。
这是调用所有 '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
方法需要 Reader
、JsonReader
、JsonElement
或 String
以及您的实际 JSON 数据第一个参数,但你传递 "teleport-load"
。尝试这样称呼它:
map = gson.fromJson(reader.get("teleport-load"), Teleport[].class);
在这种情况下 reader.get("teleport-load")
将 return 表示 teleport-load
属性 的 JsonElement
然后 fromJson
将其转换为 Teleport[]
数组.
我在这方面工作的时间太长了,我想我只是在用 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");
}
}
保存方法输出这个
所以这对我来说很合适。
这是调用所有 '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
方法需要 Reader
、JsonReader
、JsonElement
或 String
以及您的实际 JSON 数据第一个参数,但你传递 "teleport-load"
。尝试这样称呼它:
map = gson.fromJson(reader.get("teleport-load"), Teleport[].class);
在这种情况下 reader.get("teleport-load")
将 return 表示 teleport-load
属性 的 JsonElement
然后 fromJson
将其转换为 Teleport[]
数组.