空手道 - 将 JSON 字符串字段转换为 JSON 对象

Karate - convert JSON string field to JSON Object

我有一个 API,returns 一个 JSON 对象数组,其中一个字段包含转义的 JSON。假设它看起来像这样:

{
  "results":[
    {
      "id": "id-1",
      "data": "{\"name\", \"Adam\", \"surname\": \"Parker\"}"
    },
    {
      "id": "id-2",
      "data": "{\"name\", \"Adam\", \"surname\": \"Parker-Bates\"}"
    },
    {
      "id": "id-3",
      "data": "{\"name\", \"Adam Robert\", \"surname\": \"Parker\"}"
    }
  ]
}

现在,我需要断言该数组恰好包含一个符合给定条件的元素,假设我正在寻找 Adam Parker。如果它将作为适当的 JSON 对象返回,那将非常简单。我可以搜索子字符串,但它可能会给我错误的结果。也许我可以寻找某些正则表达式来仅匹配 \"Adam\""\Parker\" 但更愿意将这些字符串转换为 JSON 对象,因为实际情况具有更复杂的嵌套数据。有什么办法可以用空手道来做吗?我不需要 ID,所以我可以将数据提取到字符串数组中(如果这样更容易的话)。

这很简单,空手道有一些辅助函数挂在 karate JS 对象上:https://github.com/karatelabs/karate#the-karate-object

顺便说一句,你的 JSON 不是 well-formed(逗号而不是冒号),这让我卡住了一段时间。

这里有一个演示,也可以参考如何进行JSON转换的文档,我们使用下面的JS数组方法:https://github.com/karatelabs/karate#json-transforms

* def response =
"""
{
  "results":[
    {
      "id": "id-1",
      "data": "{\"name\": \"Adam\", \"surname\": \"Parker\"}"
    },
    {
      "id": "id-2",
      "data": "{\"name\": \"Adam\", \"surname\": \"Parker-Bates\"}"
    },
    {
      "id": "id-3",
      "data": "{\"name\": \"Adam Robert\", \"surname\": \"Parker\"}"
    }
  ]
}
"""
* def names = response.results.map(x => karate.fromString(x.data))
* match names contains { name: 'Adam', surname: 'Parker' }