使用 jsonPath 匹配布尔真值

Matching Boolean true value using jsonPath

我正在尝试编写一个 JUnit 测试,它检查接收到的值 JSON。我使用 jsonPath 在 JSON 中访问这些值。我想检查一个值是否为 true。对于简单的 jsonPaths,它适用于我,但是当我编写更复杂的 jsonPath 查询时,它不起作用,我得到这个断言错误:

Expected: is <true>
but: was <[true]>

我的JSON:

{...
,"trips":
  [
    {...
    ,"employee":{"name":"Ordinary Joe","login":"joe","contractor":true}
    ,...
    },
    ...
  ],
 ...
}

断言有问题

.andExpect(jsonPath("$.trips[?(@.employee.login=='joe')].employee.contractor", is(true)));

我试过的

我尝试将值也与 new Boolean(true)boolean[] 数组与一个 true 值匹配,并且在 is() 匹配器检查后也与 String.valueOf(true) 匹配但是它也不匹配。

我的问题

我该如何正确匹配这个true值?这些 [] 大括号在测试输出中究竟意味着什么?

在进一步调查中,我实际上发现jsonPath以某种方式将获得的true值转换为具有一项的JsonArray,因此无法将其与is(true)匹配匹配器。我不确定为什么 JsonPath 会这样做。

我找到了以下使用 hasItem 匹配器的解决方法:

.andExpect(jsonPath("$.trips[?(@.employee.login=='joe')].employee.contractor", hasItem(true)))
.andExpect(jsonPath("$.trips[?(@.employee.login=='joe')].employee.contractor", not(hasItem(false))))