【问题标题】:Nashorn/Javascript associative array to Java object?Nashorn/Javascript 关联数组到 Java 对象?
【发布时间】:2015-07-13 07:12:42
【问题描述】:

我正在尝试将 Wicket 项目中的 JavaScript 集成到我的 TestNG 测试套件中。我决定试试 Nashorn 项目。

现在我想解析 nashorn 的结果。我从 javascript 返回一个关联数组,并得到一个 ScriptObjectMirror 作为返回类型。

ScriptEngine engine = factory.getEngineByName( "nashorn" );
String content = new String( Files.readAllBytes( Paths.get( "my-funcs.js" ) ) );
Object result = engine.eval( content + ";" + script );

当然,我可以 JSON.stringify 数组,使用更多的 javascript 脚本,然后使用 Gson 或类似的库将其解析回来,但是对于这个映射问题是否有更原生的方法?

【问题讨论】:

标签: javascript java json nashorn


【解决方案1】:

感谢上面的cmets,找到了一个比较不错的解决方案,使用Apache Commons BeanUtils

public static class MyResult
{
    private String prop1;
    public void setProp1(String s)
    {
        ...
    }
}

...

public MyResult getResult(String script)
{
    //ugly-but-fast-to-code unchecked cast
    ScriptObjectMirror som = (ScriptObjectMirror) engine.eval(script);    
    MyResult myResult = new MyResult();
    BeanUtils.populate(myResult, som);
    return myResult;
}

【讨论】:

  • 如果 MyResult 类中有数组,它将不起作用。 ScriptObjectMirror 中的每个列表也将是 ScriptObjectMirror 对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-27
  • 1970-01-01
  • 2017-10-11
  • 2015-04-22
  • 1970-01-01
  • 2016-01-11
  • 2011-08-24
相关资源
最近更新 更多