java - 通过 JSON 加载 Hashmap

标签 java json gson

HashMap :

public HashMap<Perk, Boolean> perks;
public HashMap<Perk, Boolean> getPerks() {
    return perks;
}

我如何保存(工作正常,我使用的是 Google 的 GSON):

object.add("perks", builder.toJsonTree(player.perks));

保存预览:

"perks": {
    "DAMAGE_AMPLIFIER": true
  }

我如何尝试加载但无法正常工作,错误如下。

if (reader.has("perks")) {
    jsonToMap(reader.get("perks").toString(), player);
}

jsonToMap 方法:

    public static void jsonToMap(String t, Player player) throws JSONException {

    JSONObject jObject = new JSONObject(t);
    Iterator<?> keys = jObject.keys();

    while(keys.hasNext()) {
        String key = keys.next().toString();
        boolean value = jObject.getBoolean(key); 
        player.perks.put(Perk.valueOf(key), value);
    }
}

错误:

java.lang.NullPointerException
at com.callisto.world.entity.impl.player.PlayerLoading.jsonToMap(PlayerLoading.java:730)
at com.callisto.world.entity.impl.player.PlayerLoading.getResult(PlayerLoading.java:684)

最佳答案

如果我必须猜测perks为空,这就是为什么当你这样做 put 时你得到一个空指针。将其更改为:

public HashMap<Perk, Boolean> perks=new HashMap<>(); //We init the hashmap here so we can putt stuff after that
public HashMap<Perk, Boolean> getPerks() {
    return perks;
}

您甚至可以将其更改为: Map<Perk, Boolean> perks=new HashMap<>();并在方法中使用接口(interface)而不是实现

关于java - 通过 JSON 加载 Hashmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50233965/

相关文章:

java - 使用 JToggleButton 而不触发它。

json - 将客户端 Json 下载为 CSV

json - Go:在结构中建模通用 JSON 数组可能吗?

json - 如何创建VSCode任务,创建不带BOM的文件

java - GSON:知道要转换成什么类型​​的对象?

java - 如何使用 JPA Criteria 左连接两个不相关的表?

java - Spring和Java Encoder中数据库密码和用户登录密码的安全如何?

java - Class.forName ("org.postgresql.Driver") 错误

android - 在 Android 的 GSON 中反序列化泛型类

java - 从 json 模式动态生成 JSON