如何从 groovy 执行 Javascript 代码并以地图形式获取结果?

Bla*_*ger 5 groovy scriptengine

如何从 groovy 获取执行 javascript 代码的结果?我尝试了以下操作,但我总是返回字符串“world”。我本来期望的是一个物体或地图。

import javax.script.ScriptEngineManager
import javax.script.SimpleBindings

def manager = new ScriptEngineManager()
manager.getEngineByName("JavaScript").eval("""
    {hello: name}
""", [name:'world'] as SimpleBindings)
Run Code Online (Sandbox Code Playgroud)

Nic*_*aly 4

简单的!

您可以将对象映射到变量,然后返回...

import javax.script.*

def bindings = [name:'world']

def response = new ScriptEngineManager()
    .getEngineByName('javascript')
    .eval("var r = {hello:name}; r;", bindings as SimpleBindings)

println response.hello // -> world
Run Code Online (Sandbox Code Playgroud)

或者您可以跟踪responseMap 对象并更新它......

import javax.script.*

def bindings = [name:'world',response:[:]]

new ScriptEngineManager()
    .getEngineByName('javascript')
    .eval("var r = {hello:name}; response.data = r;", bindings as SimpleBindings)

println bindings.response.data.hello // -> world
Run Code Online (Sandbox Code Playgroud)

常规版本: 2.4.5

Java版本: 1.8.0_60