LibGDX:从json文件读取到ArrayList
我需要将json文件读取到ArrayList的帮助。LibGDX:从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: .
}
我看了一下JSON文件libgdx文章,但我发现它不清楚......我不知道如何来填补阵列。请帮我解决这个案子!
你的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));
}
希望这会有所帮助。
从Tanmay帕蒂尔答案是正确的,但你可以保存循环:
ArrayList<Tile> board = json.fromJson(ArrayList.class, Tile.class, Gdx.files.internal("data/tiles.json"));
谢谢,这是非常有用的加法 – Pasha 2016-02-11 18:03:46
圣洁的废话。我只是将原来的JSON加载代码从10行减少到1. LibGDX非常的甜美。 – NielW 2016-03-09 06:27:04
我刚刚遇到这个帖子,这与我的问题有些相关。而不是阅读json文件,是否可以将json字符串(以原始问题发布)写入文件?我看到的也是打印在序列化的json文件中的类信息,我不想。我的问题链接:http://gamedev.stackexchange.com/questions/125307/unable-to-remove-class-information-in-serialized-json-file-using-libgdx – user2582651 2016-07-11 08:19:52
你所说的“一些问题”是什么意思?编译或运行时错误?你可以发布吗? – NiziL 2014-11-22 14:31:58
我编辑了我的帖子。据我所知,我有错误的解析json文件到我的数组。 – Pasha 2014-11-22 14:40:38