2014-09-23 50 views
0

我已经试过设置密钥(json节点id)的值的代码。但它没有设定价值。 Log.info声明显示正确的值。在groovy中使用绑定变量设置json密钥

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我在值列其中我通过KeyValue上面获取保存在数据源这样request.idrequest.app.id一些JSON节点和有预期值。我希望在运行时将json节点的值更改为相应的值。因此,对于数据源的每次迭代,它应该设置该特定json节点的正确值。 Befor上面的代码我已经解析了我的json请求json slurper,在上面的代码之后,我再次构建了json,并且运行了请求。解析和运行请求工作正常,只是我无法设置JSON节点的值。

+0

请描述而不只是破解你的问题。 – SiKing 2014-09-23 15:57:30

+0

@SiKing,谢谢你的回应。对不起,如果我缺乏解释。我编辑了原始问题。 – user1207289 2014-09-23 16:15:39

+0

我刚才问过这一天:http://stackoverflow.com/a/25901091/3124333 – SiKing 2014-09-23 18:23:43

回答

0

如果你的键只是虚线的名字,你可以简单地使用一些字符串操作,不需要涉及到Groovy解析器。

例如,如果他们都开始request

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 
+0

我没有尝试过,但它现在的方式是我避免分离'Key'并直接从数据源使用它,像这样'def slurper = new JsonSlurper()'def parsed_MessageBody = slurper.parseText(RawRequest)''def node =“parsed_MessageBody”+“。”+ Key''Eval.me('parsed_MessageBody',parsed_MessageBody,“$ node ='$ Value'”)'。似乎工作正常。我解析它,以便我们可以为Json对象分配新的值。我不明白你的代码在哪里做这件事。但这可能是我有限的时髦知识。但是,感谢您的意见。 – user1207289 2014-10-02 19:11:51