Подтвердить что ты не робот

LibGDX: чтение из json файла в ArrayList

Мне нужна помощь при чтении json файла в ArrayList.

У меня есть json файл:

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

У меня есть класс:

public class Tile {

    public String name;
    public String symbol;

}

И у меня есть еще один класс с 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"));
    }

}

Мне нужно заполнить этот ArrayList данными из json файла, но у меня есть некоторые проблемы. Я предполагаю, что линия

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

неверно.

Когда я пытаюсь запустить его,

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: .
}

Я прочитал статью libgdx о json файлах, но нашел, что это неясно... Я не понимаю, как заполнить массив. Пожалуйста, помогите мне в этом случае!

4b9b3361

Ответ 1

В вашем json файле хранится ArrayList<Tile>, и вы пытаетесь прочитать его как Tile.

Есть два способа исправить это.

1) Вы можете инкапсулировать сборку фрагментов в другом классе, чтобы упростить сериализацию.

2) Прочитайте как ArrayList и измените тип позже.

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

Надеюсь, что это поможет.

Ответ 2

Ответ от Tanmay Patil прав, но вы можете сохранить цикл:

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