在groovy中使用绑定变量设置json键

在groovy中使用绑定变量设置json键,groovy,soapui,Groovy,Soapui,我有一段代码,我试图通过它设置一个键的值(一个json节点id)。但它并没有设定价值日志.信息语句显示正确的值 Key= context.expand( '${#Project#key}' ) Value= context.expand( '${#Project#value}' ) Binding binding = new Binding() binding.setVariable("v", "$Value") binding.setVariable("k", "$Key") log.info

我有一段代码,我试图通过它设置一个键的值(一个json节点
id
)。但它并没有设定价值<代码>日志.信息语句显示正确的值

Key= context.expand( '${#Project#key}' )
Value= context.expand( '${#Project#value}' )
Binding binding = new Binding()
binding.setVariable("v", "$Value")
binding.setVariable("k", "$Key")
log.info(binding.getVariable("v"))  // gives me the value 1234
log.info(binding.getVariable("k"))  // gives me the value request.id
def SetKey = new GroovyShell(binding).evaluate( "k=v")
有人能评论一下这个代码中的错误吗。我怎样才能纠正它呢

编辑:问题解释


在SoapUI中,我在数据源中保存了一些json节点,比如
request.id
request.app.id
,在值列中有期望值,我通过上面的
Key
Value
获取这些值。我希望在运行时将json节点的值更改为其各自的值。因此,对于数据源的每次迭代,它都应该设置特定json节点的正确值。在上面的代码之前,我通过
json slurper
解析了我的json请求,在上面的代码之后,我通过
json builder
再次构建json并运行请求。解析和运行请求工作正常,只是我无法设置json节点的值

如果您的键只是点名称,那么您可以简单地使用一些字符串操作,而无需使用Groovy解析器

例如,如果它们都以
请求开始

def steps = Key.split(/\./)
if (steps.size() < 2 || steps[0] != 'request') {
    throw ...
}
def obj = request
if (steps.size() > 2) {
    steps[1..-2].each { 
        obj = obj[it] 
    }
}
obj[steps[-1]] = Value
def steps=Key.split(/\./)
if(steps.size()<2 | | steps[0]!='request'){
扔。。。
}
def obj=请求
如果(步长.size()>2){
步骤[1..-2]。每个{
obj=obj[it]
}
}
obj[步骤[-1]]=值

请描述您的问题,而不仅仅是坏的解决方案。@SiKing,谢谢您的回复。对不起,我解释得太少了。我已经编辑了原始问题。前几天我刚问了这个问题:@SiKing这就是我正在尝试的。我尝试了
def SetKey=newgroovyshell(binding).evaluate(“k=v”)
evaluate('k=“v”)
evaluate('k=“$v”)
。但它不会在请求中显示更改后的值。在第一种情况下,当我执行
log.info(SetKey)
时,它会显示正确的值,但在脚本日志中打印整个请求时不会显示。有什么我忘了返回到主脚本,在那里我再次构建请求吗?@SiKing我想这可能是我的问题,但我不知道如何克服这个问题。如果分配发生在GroovyShell上下文中,我将如何使该分配影响在主脚本上下文中构建的请求。任何想法都将不胜感激。谢谢我没有尝试过,但现在的做法是我避免拆分
,直接从数据源使用它,比如
def slurper=new JsonSlurper()
def parsed\u MessageBody=slurper.parseText(RawRequest)
def node=“parsed\u MessageBody”+“+Key
Eval.me('parsed_MessageBody',parsed_MessageBody,“$node='$Value'”)似乎工作正常。我对它进行了分析,以便我们可以为Json对象分配新的值。我不明白您在代码中的什么地方这样做。但这可能是我有限的groovy知识。但感谢您的输入。