【问题标题】:Setting json key using bind variables in groovy在groovy中使用绑定变量设置json键
【发布时间】:2014-09-23 15:12:47
【问题描述】:

我有这段代码,我试图通过它来设置一个键的值(一个 json 节点id)。但它没有设置值。 Log.info 语句显示正确的值。

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

【问题讨论】:

  • 请描述您的问题,而不仅仅是损坏的解决方案。
  • @SiKing,感谢您的回复。对不起,如果我缺乏解释。我已经编辑了原始问题。
  • 前几天我刚问过这个问题:stackoverflow.com/a/25901091/3124333
  • @SiKing 这就是我正在尝试的。我试过def SetKey = new GroovyShell(binding).evaluate( "k=v")evaluate( 'k="v"')evaluate( 'k="$v"')。但它没有显示请求中更改的值。在第一种情况下,当我执行 log.info(SetKey) 时,它显示了正确的值,但当我在脚本日志中打印出整个请求时却没有。有什么我忘记返回到我再次构建请求的主脚本的地方吗?
  • @SiKing 我想这可能是我的问题,但我不知道如何克服这个问题。如果分配发生在 GroovyShell 上下文中,我将如何使该分配影响在主脚本上下文中构建的请求。任何想法将不胜感激。谢谢!

标签: groovy soapui


【解决方案1】:

如果您的键只是点名称,您可以简单地使用一些字符串操作,无需涉及 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

【讨论】:

  • 我还没有尝试过,但现在的方式是避免拆分 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 对象分配新值。我不明白您在代码中的哪个位置执行此操作。但这可能是我有限的常规知识。但感谢您的意见。
猜你喜欢
  • 2018-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多