我有一个本机方法,它应该迭代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
?
任何暗示都会非常感激!谢谢! :)
答案 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。