从JSON执行Groovy脚本

时间:2018-08-20 10:25:22

标签: json http curl groovy

如果我想使用 curl 在JSON中发送多行字符串,唯一的方法是使用空格将字符串连接起来。所以这是工作。但是,如果我发送将要运行的groovy脚本怎么办?就像在 content 属性中一样:

{
  "name": "helloWorld",
  "content": "repository.createDockerHosted('docker_private', 8082_1, null) repository.createDockerHosted('docker_private_2', 8082, null)",
  "type": "groovy"
}

是否可以通知groovy编译器有两条指令?也许通过在 content 值中添加一些特殊字符?

感谢您的帮助:)

1 个答案:

答案 0 :(得分:3)

要将字符串作为Groovy脚本执行,标准模式是将GroovyShellBinding一起使用:

class Repository {
    def createDockerHosted(a, b, c) {
        println "TRACER createDockerHosted $a $b $c"
    }
}

def content = "repository.createDockerHosted('docker_private', 8082_1, null) ; repository.createDockerHosted('docker_private_2', 8082, null)"

def binding = new Binding()
binding.setProperty('repository', new Repository())
def shell = new GroovyShell(binding)
shell.evaluate(content)

(在上面请注意,content具有;来分隔两个语句)输出:

$ groovy Example.groovy 

TRACER createDockerHosted docker_private 80821 null
TRACER createDockerHosted docker_private_2 8082 null

对于您的情况(据我了解),唯一的问题是如何从JSON中提取content

def jsonStr = '''
{
  "name": "helloWorld",
  "content": "repository.createDockerHosted('docker_private', 8082_1, null) ; repository.createDockerHosted('docker_private_2', 8082, null)",
  "type": "groovy"
}
'''

def jsonMap = new groovy.json.JsonSlurper().parseText(jsonStr)
def content = jsonMap['content']