我已经完成了一个从Java操作JavaScript对象的程序
String buildInfoJS = "var build_info = new Object;build_info.BUILD_DISPLAY_VERSION = 'Build 201302232300'";
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine jsEngine = mgr.getEngineByName("JavaScript");
jsEngine.eval(buildInfoJS);
Object object = jsEngine.get("build_info");
System.out.println(object.getClass().getName());
if (object instanceof NativeObject ) {
NativeObject nObj = (NativeObject)object
for (Object key: nObj.getAllIds()) {
System.out.println(key);
}
}
现在对象是instanceof sun.org.mozilla.javascript.internal.NativeObject
,但我不能直接使用它们。
有什么方法可以解决这个问题吗?
答案 0 :(得分:0)
为什么不使用JSON和Java JSON API?或者,您也可以使用GWT(Google Web Toolkit)。
答案 1 :(得分:0)
考虑通过脚本引擎强制Java类型。
例如,此代码将属性名称强制转换为本机Java:
public static void main(String[] a) throws ScriptException {
ScriptEngine engine = new ScriptEngineManager()
.getEngineByName("JavaScript");
Object o = engine.eval("(function(){return {foo:'Hello', bar:100};}());");
engine.put("toInspect", o);
engine.put("visitor", new PropertyNameVisitor());
engine.eval("(function(obj){" +
" var arr, prop;" +
" arr = [];" +
" for(prop in obj) {" +
" if(obj.hasOwnProperty(prop)) {" +
" visitor.visit(prop);" +
" }" +
" }" +
" return arr;" +
"}(toInspect));");
}
public static class PropertyNameVisitor {
public void visit(String name) {
System.out.println(name);
}
}