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 匹配。