在GWT JSNI中迭代JSONObject

时间:2013-06-07 10:49:33

标签: json gwt iteration jsni

我有一个本机方法,它应该迭代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 :(
    }
}-*/;

另外,有没有办法将Java Map类型转换为JSONObject

任何暗示都会非常感激!谢谢! :)

2 个答案:

答案 0 :(得分:3)

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

所以,要么使用普通的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);
  }
}

答案 1 :(得分:2)

你有没有试过像:

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

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

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