Java 通过JSON加载Hashmap

Java 通过JSON加载Hashmap,java,json,gson,Java,Json,Gson,哈希映射: public HashMap<Perk, Boolean> perks; public HashMap<Perk, Boolean> getPerks() { return perks; } 保存预览: "perks": { "DAMAGE_AMPLIFIER": true } 我如何尝试加载但不工作,错误如下 if (reader.has("perks")) { jsonToMap(reader.get("perks").to

哈希映射:

public HashMap<Perk, Boolean> perks;
public HashMap<Perk, Boolean> getPerks() {
    return 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);
    }
}

如果我必须猜测
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;
}
public HashMap perks=new HashMap()//我们在这里初始化hashmap,这样我们就可以把东西放在后面
公共HashMap getPerks(){
回报津贴;
}
您甚至可以将其更改为:
Map perks=newhashmap()并在方法中使用接口而不是实现

这项工作做得很好,但是仍然存在空值。我假设它在hashmap中的位置做得不对。知道吗?地图上有空的吗?我猜布尔值=jObject.getBoolean(key);返回null可能是因为json或其他原因,也可能是JSONObject上的迭代。我不知道具体的实现,但你应该像jObject.get(“perks”).keys()这样做,这是我的猜测布尔类型的布尔包装器在声明时被分配了一个空值,而本机布尔值默认为false。是的,我想问题是他在JsonObject上迭代时没有得到正确的值。
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)
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;
}