2014-11-22 11 views
10

Ich brauche Hilfe beim Lesen von JSON-Datei zu ArrayList.LibGDX: Lesen von JSON-Datei zu ArrayList

Ich habe JSON-Datei:

[ 
    { 
     "name": "Wall", 
     "symbol": "#",  
    }, 
    { 
     "name": "Floor", 
     "symbol": ".", 
    } 
] 

Ich habe eine Klasse:

public class Tile { 

    public String name; 
    public String symbol; 

} 

Und ich habe eine andere Klasse mit Arraylist:

public class Data { 

    public static ArrayList<Tile> tilesData; 

    public static void loadData() { 
     tilesData = new ArrayList<Tile>(); 
     Json json = new Json(); 
     json.fromJson(Tile.class, Gdx.files.internal("data/tiles.json")); 
    } 

} 

Ich brauche diese Arraylist mit füllen Daten von JSON-Datei, aber ich habe ein paar Probleme. Ich denke, die Linie

json.fromJson(Tile.class, Gdx.files.internal("data/tiles.json")); 

ist falsch.

Wenn ich versuche, es zu laufen dort

Exception in thread "LWJGL Application" com.badlogic.gdx.utils.SerializationException: Error reading file: data/tiles.json 

Caused by: com.badlogic.gdx.utils.SerializationException: Unable to convert value to required type: [ 
{ 
    name: Wall, 
    symbol: # 
}, 
{ 
    name: Floor, 
    symbol: . 
} 

ist ich den Libgdx Artikel über JSON-Dateien zu lesen, aber ich fand es unklar ... Ich verstehe nicht, wie Array zu füllen. Bitte, hilf mir bei diesem Fall!

+0

Was meinst du mit „einige Probleme“? Kompilierungs- oder Laufzeitfehler? Kannst du es posten? – NiziL

+0

Ich habe meinen Beitrag bearbeitet. Wie ich weiß, habe ich einen Fehler bei der Analyse der JSON-Datei zu meinem Array. – Pasha

Antwort

7

Ihre JSON-Datei hat ArrayList<Tile> darin gespeichert und Sie versuchen, es als Tile zu lesen.

Es gibt zwei Möglichkeiten, dies zu beheben.

1) Sie können die Sammlung von Kacheln in einer anderen Klasse kapseln, um die Serialisierung zu vereinfachen.

2) Als ArrayList lesen und Typ später konvertieren.

ArrayList<JsonValue> list = json.fromJson(ArrayList.class, 
              Gdx.files.internal("data/tiles.json")); 
for (JsonValue v : list) { 
    tilesData.add(json.readValue(Tile.class, v)); 
} 

Ich hoffe, dies hilft.

+0

Kannst du mir bitte mehr darüber erzählen, wie man das eingibt? Vielen Dank für Ihre Antwort! – Pasha

+0

Ich habe die Antwort aktualisiert. Bitte schau es dir an. –

+0

Vielen Dank, es hat geholfen – Pasha

7

Die Antwort von Tanmay Patil ist richtig, aber die Schleife mit speichern:

ArrayList<Tile> board = json.fromJson(ArrayList.class, Tile.class, Gdx.files.internal("data/tiles.json")); 
+0

Vielen Dank, es ist sehr nützlich Addition – Pasha

+0

Heiliger Mist. Ich habe meinen ursprünglichen JSON-Ladecode von 10 Zeilen auf 1 reduziert. LibGDX ist ziemlich süß. – NielW

+0

Ich bin gerade auf diesen Beitrag gestoßen, der etwas mit meinen Fragen zu tun hat. Anstatt die JSON-Datei zu lesen, ist es möglich, die JSON-Zeichenkette (in der Originalfrage) in die Datei zu schreiben? Ich sehe Klasseninformationen auch in der serialisierten JSON-Datei, die ich nicht will. Meine Fragen Link: http://gamedev.stackexchange.com/questions/125307/unable-to-remove-class-information-in-serialized-json-file-using-libgdx – user2582651