Nashorn/Javascript关联数组到Java对象?
我正在尝试将Wicket项目中的Nashorn/Javascript关联数组到Java对象?,javascript,java,json,nashorn,Javascript,Java,Json,Nashorn,我正在尝试将Wicket项目中的JavaScript集成到TestNG测试套件中。我决定试试纳肖恩计划 现在我想解析来自nashorn的结果。我从javascript返回一个关联数组,并将ScriptObjectMirror作为返回类型 ScriptEngine engine = factory.getEngineByName( "nashorn" ); String content = new String( Files.readAllBytes( Paths.get( "my-funcs.j
JavaScript
集成到TestNG
测试套件中。我决定试试纳肖恩计划
现在我想解析来自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
或类似的库对其进行解析,但是有没有一种更自然的方法来解决这个映射问题呢 多亏了上面的评论,我找到了一个相对不错的解决方案,使用
ScriptObjectMirror
有一个文档化的接口-ScriptObjectMirror
似乎实现了Map
-您当然可以通过它访问所有键/值对?“harmic”是对的。ScriptObjectMirror是Nashorn文档化接口的一部分。官方的API站点链接是,如果MyResult类中有数组,它将不起作用。ScriptObjectMirror中的每个列表也将是ScriptObjectMirror对象。
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;
}