如何在文件中保存和加载JSONObject集合?

时间:2016-07-11 01:18:01

标签: java json minecraft bukkit jsonobject

我目前正在尝试将JSONObjects的集合保存到我的.yml文件中。 但是当我从文件中加载JSONObjects时,我陷入了困境。

我的消息来源:

static boolean saveChest(JSONObject obj){
    chestList.add(obj);
    FC = YamlConfiguration.loadConfiguration(STORAGE);
    FC.set("chests", chestList.toArray().toString());
    try {
        FC.save(STORAGE);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return false;
}

public static boolean loadChests(){
    try{
        chestList.clear();
        if(!STORAGE.exists()){
            STORAGE.getParentFile().mkdirs();
            STORAGE.createNewFile();
        }
        FC = YamlConfiguration.loadConfiguration(STORAGE);
        Collection<JSONObject> list = new ArrayList<JSONObject>();
        list.addAll((Collection<? extends JSONObject>) (JSONObject) FC.get("chests"));
        for(JSONObject temp : list){
            chestList.add(temp);
            Location loc =  (Location) temp.get("loc");
            Hologram holo = HologramsAPI.createHologram(PLUGIN, loc.add(0.5, 2, 0.5));
            holo.appendTextLine("§e§lVote Chest");
            holo.appendTextLine("§bRight-Click with Vote Key to open!");
        }
        return true;
    }catch(Exception e){
        e.printStackTrace();
        return false;
    }
}

public static boolean registerChest(Block chest, ChestType type){
    JSONObject temp = new JSONObject();
    switch(type){
    case VOTE:
        temp.put("loc", chest.getLocation().toString());
        temp.put("type", type.toString());
        Hologram holo = HologramsAPI.createHologram(PLUGIN, chest.getLocation().add(0.5, 2, 0.5));
        holo.appendTextLine("§e§lVote Chest");
        holo.appendTextLine("§bRight-Click with Vote Key to open!");
        break;
    }
    saveChest(temp);
    return false;
}

我收到以下错误:

hastebin of my error

Chest.java:245:

list.addAll((Collection<? extends JSONObject>) (JSONObject) FC.get("chests"));

现在尝试将近2个小时来解决这个问题,但我想我只是不知道要做些什么来修复它。 你能帮助我吗?

1 个答案:

答案 0 :(得分:0)

我认为您正在尝试将一组字符串(从YamlConfiguration对象返回)直接转换为JSONObjects的集合。如果有问题的字符串是JSON格式,您可以实例化一个新的JSONParser并将每个String解析为JSONObject; e.g:

Collection<JSONObject> list = new ArrayList<JSONObject>();
JSONParser jsonParser = new JSONParser();
for (String s : FC.get("chests")) {
    list.add((JSONObject) jsonParser.parse(s));
}

或者,为了使用addAll(),您可以首先创建一个字符串集合,然后在循环遍历集合时将它们解析为JSONObjects。