2

我有一个本机方法应该遍历 JSONObject。有没有办法做到这一点?

public native void foo(JSONObject c)/*-{
    var keys = c.@com.google.gwt.json.client.JSONObject::keySet()();

    for ( var k : keys ){
        alert(k); // this does not fire up. no error in console :(
    }
}-*/;

另外,有没有办法将 JavaMap类型转换为JSONObject?

任何提示将不胜感激!谢谢!:)

4

2 回答 2

3

JSONObject#keySet返回 a Set,它是一个包装JS 数组的对象(在 prod 模式下;在 DevMode 中,它是java.util.SetJVM 的标准。

所以,要么使用纯 Java:

Set<String> keys = c.keySet();
for (String key : keys) {
  Window.alert(key); // or call a JSNI method here if you need?
}

或者先提取底层JavaScriptObject,然后你可以使用 JS for…in

var o = c.@com.google.gwt.json.client.JSONObject::getJavaScriptObject()();
for (var k in o) {
  if (o.hasOwnProperty(k)) {
    alert(k);
  }
}
于 2013-06-07T11:40:05.823 回答
2

您是否尝试过类似的方法:

for (var k in c) {
  if (c.hasOwnProperty(k)) {
    alert(k+":"+c[k]);
  }
}

我的记忆没有失败,我认为这段代码有效......

关于第二个问题,如果您的实体是 Java-GWT 有效实体,则可以使用Autobeans获取 JsonObject。

于 2013-06-07T10:57:51.060 回答