【问题标题】:Iterating over JSONObject in GWT JSNI在 GWT JSNI 中迭代 JSONObject
【发布时间】:2013-06-07 10:49:32
【问题描述】:
我有一个本机方法应该遍历 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?
任何提示将不胜感激!谢谢! :)
【问题讨论】:
标签:
json
gwt
iteration
jsni
【解决方案1】:
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,然后可以使用JSfor…in:
var o = c.@com.google.gwt.json.client.JSONObject::getJavaScriptObject()();
for (var k in o) {
if (o.hasOwnProperty(k)) {
alert(k);
}
}
【解决方案2】:
您是否尝试过类似的方法:
for (var k in c) {
if (c.hasOwnProperty(k)) {
alert(k+":"+c[k]);
}
}
我的记忆没有失败,我认为这段代码有效......
关于第二个问题,如果你的实体是Java-GWT有效实体,你可以使用Autobeans获取JsonObject。