首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >LibGDX:从json文件读取到ArrayList

LibGDX:从json文件读取到ArrayList
EN

Stack Overflow用户
提问于 2014-11-22 14:21:56
回答 3查看 8.4K关注 0票数 14

我需要帮助阅读json文件到ArrayList。

我有json档案:

代码语言:javascript
运行
复制
[
    {
        "name": "Wall",
        "symbol": "#",      
    },
    {
        "name": "Floor",
        "symbol": ".",
    }
]

我有一堂课:

代码语言:javascript
运行
复制
public class Tile {

    public String name;
    public String symbol;

}

我还有一个关于ArrayList的类:

代码语言:javascript
运行
复制
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"));
    }

}

我需要用json文件中的数据填充这个ArrayList,但是我有一些问题。我猜这句话

代码语言:javascript
运行
复制
json.fromJson(Tile.class, Gdx.files.internal("data/tiles.json"));

是错的。

当我试着运行它的时候

代码语言:javascript
运行
复制
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文章,但我发现不清楚.我不知道怎么填充数组。拜托,帮我处理这个案子!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-22 18:31:18

json文件中存储了ArrayList<Tile>,您正在尝试将它作为Tile读取。

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

1)您可以将瓷砖集合封装在另一个类中,以简化序列化。

2)读取为ArrayList,并在以后转换类型。

代码语言:javascript
运行
复制
ArrayList<JsonValue> list = json.fromJson(ArrayList.class,
                                          Gdx.files.internal("data/tiles.json"));
for (JsonValue v : list) {
    tilesData.add(json.readValue(Tile.class, v));
}

希望这能有所帮助。

票数 9
EN

Stack Overflow用户

发布于 2015-05-24 13:46:28

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

代码语言:javascript
运行
复制
ArrayList<Tile> board = json.fromJson(ArrayList.class, Tile.class, Gdx.files.internal("data/tiles.json"));
票数 9
EN

Stack Overflow用户

发布于 2018-05-16 00:13:01

代码语言:javascript
运行
复制
ArrayList<Tile> board = json.fromJson(ArrayList.class, Tile.class,
    Gdx.files.internal("data/tiles.json").readString());

两年来,libgdx发生了一点变化,所以设法让它发挥作用。现在我们必须添加.readString()。我被困住了直到我弄明白了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27078410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档