如何使用 jsonPath 过滤空手道 dsl 中的复杂响应?

How to filter a complex response in karate dsl using jsonPath?

我收到的响应低于 REST API,但我发现很难从收到的响应中提取标签值并将其分配给一个变量以便稍后在脚本中使用它。
这是响应::

{
  "result": "SUCCESS",
  "rawAttr": "[{\"attributes\":[{\"name\":\"resourceid\",\"value\":\"7A7Q123456\"},{\"name\":\"physicalid\",\"value\":\"7A7Q123456\"},{\"name\":\"dsw:label\",\"value\":\"MY Product00004285\"},{\"name\":\"dsw:created\",\"value\":\"2019-11-06T08:39:39Z\"}]}]",
  "physicalid": "7A7Q123456",
  "contextPath": "/path",
  "id": "7A7Q123456",
  "message": null
}

我能够得到 response.idresponse.result 这有助于验证,但我无法得到 dsw:label valueMY Product00004285

当我执行 def Arr = response.rawAttr 时,我得到以下值,无论它是数组还是字符串,我感到很困惑。好像是字符串。

[{"attributes":[{"name":"resourceid","value":"7A7Q123456"},{"name":"physicalid","value":"7A7Q123456"},{"name":"dsw:label","value":"MY Product00004298"},{"name":"dsw:created","value":"2019-11-06T08:39:39Z"}]}]

在 JMeter JSON Extractor 中使用下面的 JSON 路径表达式很容易提取标签 $.attributes.value[2]

参考空手道的类型转换能力:https://github.com/intuit/karate#type-conversion

所以你可以这样做:

* json attr = response.rawAttr

然后就大功告成了。

感谢将字符串转换为 json 的示例和文档。
知道怎么做了。

And def strVar = response.rawAttr
And json jsonVar = strVar
And def attrb = karate.jsonPath(jsonVar, '$..attributes.[2].value')[0]
And print '\n\n Attrb\n', attrb

我引用的链接:
Json Path evaluator
Karate doc reference for type conversion
Karate example for type-conversion