空手道 - 将 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' }
我有一个 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' }