如何使用groovy从json格式获取数据?

时间:2016-04-01 19:05:40

标签: groovy

我在soapui中有一个请求,它返回一个json响应。 我使用groovy来检索响应的内容。 回应:

<item><response>{
  "timestamp": "2016-04-01T16:40:34",
  "data": [
    {
      "deleted_at": null,
      "userid": "b6d66002-8da4-4c03-928c-46871f084fb8",
      "updated_by": null,
      "created_at": "2016-03-01T16:40:34",
      "updated_at": "2016-03-01T16:40:34",
      "created_by": null,
      "value": "hBeO",
      "setting": "test",
      "name": "test2"
    }
  ],
  "success": true
}</response></item>

从这个响应我想检索每个节点,如: deleted_at created_at

所以我使用这个groovy

import groovy.json.JsonSlurper

def response = context.expand( '${set_settings#Response#declare namespace ns1=\'https://wato.io/ns/20160131\'; //ns1:set_settings_resp[1]/ns1:item[1]/ns1:response[1]}' )
def slurper = new JsonSlurper()
def result = slurper.parseText(response)

testRunner.testCase.setPropertyValue("user_id", result.data.userid)

我收到此错误消息:

groovy.lang.MissingMethodException: No signature of method: com.eviware.soapui.impl.wsdl.WsdlTestCasePro.setPropertyValue() is applicable for argument types: (java.lang.String, java.util.ArrayList) values: [userid, [b6df6662-8da4-4c03-928c-46871f084fb8]] Possible solutions: setPropertyValue(java.lang.String, java.lang.String), getPropertyValue(java.lang.String) error at line: 8

它仅适用于时间戳节点。 请帮忙。 谢谢

1 个答案:

答案 0 :(得分:2)

这是因为result.data是一个列表,所以它返回userid的列表(包含一个项目)

您需要从列表中获取第一项,因此请尝试:

testRunner.testCase.setPropertyValue("user_id", result.data.userid.head())