从java操作Javascript对象
我已经完成了一个从Java操作JavaScript对象的程序从java操作Javascript对象,java,javascript,Java,Javascript,我已经完成了一个从Java操作JavaScript对象的程序 String buildInfoJS = "var build_info = new Object;build_info.BUILD_DISPLAY_VERSION = 'Build 201302232300'"; ScriptEngineManager mgr = new ScriptEngineManager(); ScriptEngine jsEngine = mgr.getEngineByName("JavaScr
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);
}
}
现在对象是sun.org.mozilla.javascript.internal.NativeObject的实例,但我不能直接使用它们
有没有办法解决这个问题?为什么不使用JSON和Java JSON API呢?或者,您也可以使用GWT(Google Web Toolkit)。考虑通过脚本引擎强制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);
}
}
您是否有任何解析错误或任何错误?您应该解释“我不能直接在那里使用”的含义。您想对该对象做什么?您尝试了什么,遇到了什么错误?解析javascript对象并将其转换为Java对象的目的是什么?不能使用JSON序列化程序序列化javascript对象并将其反序列化回Java对象吗?