java Hashmap Json保存和加载
您好,今天我在解析和构建Json对象时遇到了一些困难。 对于初学者,我的主要HashMap如下:
private HashMap<AchievementList, Integer> playerAchievements = new HashMap<AchievementList, Integer>(
AchievementList.values().length) {
{
for (AchievementList achievement : AchievementList.values()) {
put(achievement, 0);
}
}
private static final long serialVersionUID = -4629357800141530574L;
};
public HashMap<AchievementList, Integer> getPlayerAchievements() {
return playerAchievements;
}
在我的PlayerSave文件中,我在这里构建了这个对象:在这个对象中有一些属性,比如名称passwoords和数组。我正在尝试将hashmap保存到此对象中
Path path = Paths.get("./data/saves/characters/", player.getUsername() + ".json");
File file = path.toFile();
file.getParentFile().setWritable(true);
// Attempt to make the player save directory if it doesn't
// exist.
if (!file.getParentFile().exists()) {
try {
file.getParentFile().mkdirs();
} catch (SecurityException e) {
System.out.println("Unable to create directory for player data!");
}
}
try (FileWriter writer = new FileWriter(file)) {
Gson builder = new GsonBuilder().setPrettyPrinting().create();
JsonObject object = new JsonObject();
这就是我试图做的,但没有成功。。。我无法将哈希映射正确地构建到。json文件
object.add("playerAchievements", builder.toJsonTree(player.getPlayerAchievements().values()));
在我的PlayerLoad文件中,我有一个基于玩家登录的对象。。假设它将我的hashmap加载到players当前数据中,该数据位于playerAchievents初始化的Player类中
private HashMap<AchievementList, Integer> playerAchievements
// Create the path and file objects.
Path path = Paths.get("./data/saves/characters/", player.getUsername() + ".json");
File file = path.toFile();
// If the file doesn't exist, we're logging in for the first
// time and can skip all of this.
if (!file.exists()) {
return LoginResponses.NEW_ACCOUNT;
}
// Now read the properties from the json parser.
try (FileReader fileReader = new FileReader(file)) {
JsonParser fileParser = new JsonParser();
Gson builder = new GsonBuilder().create();
JsonObject reader = (JsonObject) fileParser.parse(fileReader);
所以我这里的最终问题是,如何将Hashmap解析到jsonObject中。那我怎么把它装回去
# 1 楼答案
正如我在您的问题中发现的代码一样,您需要将对象序列化为json格式,然后将其从json反序列化为对象
要做到这一点,您可以使用的最佳java库之一是GoogleGSON。以下是它的使用示例: