Wiremock matchesJsonPath 检查忽略顺序的数组值
Wiremock matchesJsonPath checking array values ignoring the order
我正在尝试改进代码以防止出错。我有几个请求可以采用这些形式,1:
{
"idUser": "1234",,
"ids": ["3", "1"]
}
或 2:
{
"idUser": "1234",,
"ids": ["1", "3"]
}
我有这个 Json 匹配:
{
"request": {
"urlPath": "mypath/rest/",
"bodyPatterns": [
{
"matchesJsonPath": {
"expression": "$..ids[0]",
"contains": "1"
}
},
{
"matchesJsonPath": {
"expression": "$..ids[1]",
"contains": "3"
}
}
]
},
"response": {
}
}
如何在忽略 ID 顺序的正则表达式中创建“包含”。我试过了:
"matchesJsonPath": "$[?(@..ids =~ /[1-3]+/]"
{
"matchesJsonPath": {
"expression": "$..ids",
"contains": "1"
}
},
{
"matchesJsonPath": {
"expression": "$..ids",
"contains": "3"
}
}
** 在情况 1 中它不会工作,在情况 2 中它会。
非常感谢!
我认为问题出在你的表达上,但我不是 jsonPath 专家。我认为您不需要使用 expression/includes
表示法。这样的事情应该有效:
[{
"matchesJsonPath": "$.ids[?(@ == '1')]"
},
{
"matchesJsonPath": "$.ids[?(@ == '3')]"
}]
我对此进行了测试,如果您有 "ids": ["1", "3"]
或 "ids": ["3", "1"]
,它将 return 匹配。如果您只有 "ids": ["1"]
或 "ids": ["3"]
,则不会 return 匹配。
我正在尝试改进代码以防止出错。我有几个请求可以采用这些形式,1:
{
"idUser": "1234",,
"ids": ["3", "1"]
}
或 2:
{
"idUser": "1234",,
"ids": ["1", "3"]
}
我有这个 Json 匹配:
{
"request": {
"urlPath": "mypath/rest/",
"bodyPatterns": [
{
"matchesJsonPath": {
"expression": "$..ids[0]",
"contains": "1"
}
},
{
"matchesJsonPath": {
"expression": "$..ids[1]",
"contains": "3"
}
}
]
},
"response": {
}
}
如何在忽略 ID 顺序的正则表达式中创建“包含”。我试过了:
"matchesJsonPath": "$[?(@..ids =~ /[1-3]+/]"
{
"matchesJsonPath": {
"expression": "$..ids",
"contains": "1"
}
},
{
"matchesJsonPath": {
"expression": "$..ids",
"contains": "3"
}
}
** 在情况 1 中它不会工作,在情况 2 中它会。
非常感谢!
我认为问题出在你的表达上,但我不是 jsonPath 专家。我认为您不需要使用 expression/includes
表示法。这样的事情应该有效:
[{
"matchesJsonPath": "$.ids[?(@ == '1')]"
},
{
"matchesJsonPath": "$.ids[?(@ == '3')]"
}]
我对此进行了测试,如果您有 "ids": ["1", "3"]
或 "ids": ["3", "1"]
,它将 return 匹配。如果您只有 "ids": ["1"]
或 "ids": ["3"]
,则不会 return 匹配。