Java LibGDX:从json文件读取到ArrayList

Java LibGDX:从json文件读取到ArrayList,java,json,libgdx,Java,Json,Libgdx,我需要帮助读取json文件到ArrayList 我有一个json文件: [ { "name": "Wall", "symbol": "#", }, { "name": "Floor", "symbol": ".", } ] 我有一门课: public class Tile { public String name; public String symbol; } 我

我需要帮助读取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"));
    }

}
这是错误的

当我试着运行它的时候

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

我读过关于json文件的libgdx文章,但我发现它不清楚。。。我不知道如何填充数组。请帮我拿这个箱子

您的json文件中存储了
ArrayList
,您正试图将其作为
磁贴
读取

有两种方法可以纠正这种情况

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));
}
ArrayList list=json.fromJson(ArrayList.class,
Gdx.files.internal(“data/tiles.json”);
for(JsonValue:list){
add(json.readValue(Tile.class,v));
}

希望这有帮助。

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

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

两年后,libgdx发生了一些变化,所以to设法让它工作起来。现在我们必须添加
.readString()
。我一直被困在这里,直到我明白了这一点。

你说的“一些问题”是什么意思?编译错误还是运行时错误?你能发吗?我已经编辑了我的帖子。正如我所知,我在将json文件解析到我的数组时出错了。你能告诉我更多关于如何进行类型转换的信息吗?谢谢你的回答!非常感谢,知道它有帮助很有帮助。谢谢,这是非常有用的补充。我只是将最初的JSON加载代码从10行减少到1行。LibGDX非常可爱。我刚刚看到了这篇文章,它与我的问题有些关联。不读取json文件,是否可以将json字符串(在原始问题中发布)写入该文件?我看到类信息也打印在序列化的json文件中,这是我不想要的。我的问题链接:@user2582651我回答了你的问题,希望能对你有所帮助。
ArrayList<Tile> board = json.fromJson(ArrayList.class, Tile.class, Gdx.files.internal("data/tiles.json"));
ArrayList<Tile> board = json.fromJson(ArrayList.class, Tile.class,
    Gdx.files.internal("data/tiles.json").readString());