LibGDX:从json文件读取到ArrayList

Pas*_*sha 13 java json libgdx

我需要帮助将json文件读取到ArrayList.

我有json文件:

[
    {
        "name": "Wall",
        "symbol": "#",      
    },
    {
        "name": "Floor",
        "symbol": ".",
    }
]
Run Code Online (Sandbox Code Playgroud)

我有一节课:

public class Tile {

    public String name;
    public String symbol;

}
Run Code Online (Sandbox Code Playgroud)

我有一个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"));
    }

}
Run Code Online (Sandbox Code Playgroud)

我需要用json文件中的数据填充这个ArrayList,但是我遇到了一些问题.我想这一行

json.fromJson(Tile.class, Gdx.files.internal("data/tiles.json"));
Run Code Online (Sandbox Code Playgroud)

是错的.

当我尝试运行它时

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: .
}
Run Code Online (Sandbox Code Playgroud)

我已经阅读了关于json文件的libgdx文章,但我发现它不清楚......我不明白如何填充数组.请帮帮我吧!

Tan*_*til 9

您的json文件已ArrayList<Tile>存储在其中,并且您正在尝试将其读取为Tile.

有两种方法可以纠正这个问题.

1)您可以将tile集合封装在另一个类中以简化序列化.

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));
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.


Nat*_*han 8

Tanmay Patil的答案是正确的,但你可以用以下方法保存循环:

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

  • @ user2582651我回答了你的问题,希望它可以帮到你. (2认同)