因此,我在下面的json工作:
{
"id": "",
"owner": "some dude",
"metaData": {
"request": {
"ref": null,
"contacts":[
{
"email": null,
"name": null,
"contactType": "R"
},
{
"email": null,
"name": "Dante",
"contactType": "S"
}
]
}
}
}
我想检索联系人的name
,联系人的类型为S
,并且只有第一个返回。
将jsonpath与此路径"$..contacts[?(@.contactType == 'S')].name"
一起使用始终返回字符串数组,因为过滤操作始终将结果作为数组返回。
所以我试了"$..contacts[?(@.contactType == 'S')].name[0]"
和"$..contacts[?(@.contactType == 'S')][0].name"
,但是没有运气。那些路径返回空结果。
所以我的问题是,当在jsonpath中使用filter时,有没有办法只得到第一个元素?我现在使用jayway jsonpath v2.2.0。
3条答案
按热度按时间slsn1g291#
我找到的最快的解决方案是将它与一个列表进行比较,在您的场景中如下所示:
(当然,假设你试图比较测试中的一些结果)
ozxc1zmp2#
如果您将jsonpath与spring-test中的MockMvc类一起使用,则可以编写以下伪匹配器:
并使用以下方式:
另外,由于net.minidev.json.JSONArray是java.util.List的子类,因此可以强制转换为List甚至Iterable,而不是net. minidev. json. JSONArray。:)
kfgdxczn3#
不幸的是,如果使用Jayway JsonPath implemenation,就不可能做到这一点,你需要手动地将结果解析成一个列表,然后对它做你需要做的事情。
对于使用Sping Boot 和WebTestClient进行测试的人员,您可以执行以下操作:
这个想法只是调用value方法,它将允许您从jsonpath过滤器获得结果,然后您可以自己手动检查值。