使用 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))))
我正在尝试编写一个 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))))