2016-07-11 7 views
1

Ich versuche derzeit, eine Sammlung von JSONObjects in meiner .yml-Datei zu speichern. Aber ich bin an einem Punkt fest, wenn es die JSONObjects aus der Datei laden soll.Wie kann ich eine JSONObject-Sammlung in einer Datei speichern und laden?

Meine Quellen:

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; 
} 

Ich erhalte die folgende Fehlermeldung:

hastebin of my error

Chest.java:245:

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

jetzt fast 2 Stunden Der Versuch, behebe das, aber ich nehme an, ich bekomme einfach nicht, was ich tun muss, um es zu reparieren. Können Sie mir vielleicht helfen?

+0

Es scheint, dass Ihr JSON nicht gültig ist. Daher kann es nicht an JSONObject übergeben werden. Kannst du deine FC.get ("Truhen") bekommen und prüfen, ob sie gültig ist oder nicht ?! –

+0

Falls Ihr JSON gültig ist, können Sie folgendes tun: JSONObject jsonObject = new JSONObject (FC.get ("chests")); –

Antwort

0

Ich glaube, Sie versuchen, eine Sammlung von Zeichenfolgen (die von Ihrem YamlConfiguration-Objekt zurückgegeben werden) direkt in eine Sammlung von JSONObjects zu übertragen. Wenn die betreffenden Strings im JSON-Format vorliegen, können Sie einen neuen JSONParser instanziieren und jeden String in ein JSONObject analysieren. z.B .:

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

Oder um addAll() zu verwenden, könnten Sie stattdessen zuerst eine Sammlung von Strings, erstellen und sie dann in JSONObjects analysieren, während sie durch die Sammlung Looping.

Verwandte Themen