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文章,但我发现它不清楚......我不知道如何来填补阵列。请帮我解决这个案子!

+0

你所说的“一些问题”是什么意思?编译或运行时错误?你可以发布吗? – NiziL 2014-11-22 14:31:58

+0

我编辑了我的帖子。据我所知,我有错误的解析json文件到我的数组。 – Pasha 2014-11-22 14:40:38

你的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)); 
} 

希望这会有所帮助。

+0

你能告诉我更多关于如何对此类型进行分类吗?谢谢您的回答! – Pasha 2014-11-23 07:47:48

+0

我已更新答案。请检查一下。 – 2014-11-23 08:30:45

+0

非常感谢,它帮助 – Pasha 2014-11-23 14:12:04

从Tanmay帕蒂尔答案是正确的,但你可以保存循环:

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

谢谢,这是非常有用的加法 – Pasha 2016-02-11 18:03:46

+0

圣洁的废话。我只是将原来的JSON加载代码从10行减少到1. LibGDX非常的甜美。 – NielW 2016-03-09 06:27:04

+0

我刚刚遇到这个帖子,这与我的问题有些相关。而不是阅读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