无法从json值转换为orderMap

时间:2013-06-05 18:53:14

标签: json box2d libgdx physics

尝试从here

测试physcis主体编辑器加载器(BodyEditorLoader.java)时的

我得到这个不正确的演员,下面是函数

private Model readJson(String str) {
    Model m = new Model();
    OrderedMap<String,?> rootElem 
    = (OrderedMap<String,?>) new JsonReader().parse(str);  //this line has casting problem

    Array<?> bodiesElems = (Array<?>) rootElem.get("rigidBodies");

    for (int i=0; i<bodiesElems.size; i++) {
        OrderedMap<String,?> bodyElem = (OrderedMap<String,?>) bodiesElems.get(i);
        RigidBodyModel rbModel = readRigidBody(bodyElem);
        m.rigidBodies.put(rbModel.name, rbModel);
    }

    return m;
}

2 个答案:

答案 0 :(得分:3)

因为libgdx的新版本确实支持Jsonvalue和this帮助

 private Model readJson(String str) {
    Model m = new Model();

    JsonValue map = new JsonReader().parse(str);

    JsonValue bodyElem = map.getChild("rigidBodies");
    for (; bodyElem != null; bodyElem = bodyElem.next()) {
        RigidBodyModel rbModel = readRigidBody(bodyElem);
        m.rigidBodies.put(rbModel.name, rbModel);
    }

    return m;
}

答案 1 :(得分:2)

parse method returns a JsonValue

你可能会看到这种不匹配的原因是更新的Libgdx版本,包括对JSON代码的不向后兼容的更改。请参阅the blog post,其中包括:

  

只有阅读JSON才会受到影响。如果你使用JsonReader,你会回来的   一个JsonValue而不是OrderedMap。

您可以通过更新代码以使用JsonValue或降级到旧版本的libgdx(4月25日之前)来解决此问题。如果您正在使用每晚构建的Libgdx,请务必注意更改并跟上博客(大多数重大变更都会公布)。否则,坚持使用Libgdx的“已发布”版本可能更安全。