libgdx - json将自定义类解析为数组

时间:2014-12-13 21:44:01

标签: java json libgdx

我有一个.json文件,如下所示:

[{
    t: 1,
    x: 0,
    y: 0
},
{
    t: 1,
    x: 1,
    y: 0
}]

我有一节课:

class HexTile {
    int x,y,t;
}

我有一个阵列:

Array<HexTile> hexTiles

如何将该文件的内容解析为对象并将它们放入此数组?

1 个答案:

答案 0 :(得分:2)

将类名添加到数组元素中,以便Json解析器知道将它们转换为:

[{
    class: com.yourpackage.HexTile,
    t: 1,
    x: 0,
    y: 0
},
{
    class: com.yourpackage.HexTile,
    t: 1,
    x: 1,
    y: 0
}]

然后你可以像这样加载它们。我认为libgdx的Json解析器总是将ArrayList类用于数组。

Json json = new Json();
ArrayList<HexTile> hexTiles = json.fromJson(ArrayList.class, Gdx.files.internal("myJsonFile.json"));

如果你需要它们作为libgdx数组,我知道转换它的唯一方法是有点难看:

Array<HexTile> arrayTiles = new Array<HexTile>(tiles.toArray(new HexTile[tiles.size()]));

第二种方法 - 使用包装类

此方法可以减少json文件中的混乱。创建一个包装类来保存数组:

public class HexTileArrayWrapper {
    public Array<HexTile> array;
}

使用包含它的数组元素构建你的json文件:

{
array:
[{
    t: 1,
    x: 0,
    y: 0
},
{
    t: 1,
    x: 1,
    y: 0
}]
}

然后你可以像这样加载它:

HexTileArrayWrapper arrayWrapper = json.fromJson(HexTileArrayWrapper.class, file);
Array<HexTile> arrayTiles = arrayWrapper.array;