从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

我已经完成了一个从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);
    }
}
现在对象是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对象吗?