Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nashorn/Javascript关联数组到Java对象?_Javascript_Java_Json_Nashorn - Fatal编程技术网

Nashorn/Javascript关联数组到Java对象?

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

我正在尝试将Wicket项目中的
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;
}