【问题标题】:libgdx - json parsing custom class into arraylibgdx - 将自定义类解析为数组的 json
【发布时间】:2014-12-13 21:44:01
【问题描述】:

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

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

我有一堂课:

class HexTile {
    int x,y,t;
}

我有一个数组:

Array<HexTile> hexTiles

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

【问题讨论】:

  • 我不知道一般的 Gson 和 Jackson 教程是否适用于 Libgdx 中的内容,并且 Libgdx 的文档不足(至少让我了解如何使用它)。但是感谢您的努力,祝您有美好的一天。
  • 对于 LibGDX,您不需要任何特殊的东西,只需使用 json 解析器解析它并创建您的对象。您可以手动完成,也可以为 Json 或 Jackson 编写和适配器。
  • 如何解析该文件? fromJson() 方法需要一个类,但在文件中它是该类的对象数组。
  • 这是对我有用的解决方案:stackoverflow.com/questions/23401431/libgdx-json-parsing

标签: java json libgdx


【解决方案1】:

将类名添加到您的数组元素中,以便 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-25
    • 2014-06-17
    相关资源
    最近更新 更多