我有一个 JSON 字符串,如下所示:
json = "{\"Things\": \n" +
" {\"Thing\": {\n" +
" \"ID\":\"123\",\n" +
" \"name\":\"Yet Another Thing\",\n" +
" \"price\":\"$12.99\",\n" }\n" +
" }\n" +
"}";
有没有办法在同一个语句/断言中断言ID
ofThing
是123
AND它name
是“ Yet Another Thing
” ?
目前,我似乎无法使用过滤器:
JsonPath.read(json, "$.Things.Thing[?(@.ID == '123')].name")
我得到以下异常:
java.lang.IllegalArgumentException:无效的容器对象
这可能是因为[]
上面的 JSON 字符串中没有数组表示法吗?应该有吗?
在相关说明中,是否有关于使用 Hamcrest(带有 JSON 断言)的很好的介绍?我知道官方教程,但我似乎总是弄错......
更新:这样做的理由是:如果我得到几个Thing
元素,我不能保证他们的顺序(所以我不能匹配Thing[1]
(除非我循环遍历它们))?如何确保一个元素同时具有正确的 ID 和正确的名称?如果我单独检查孩子,我会不会冒一个人Thing
有正确的名字,另一个人有正确的 ID,但没有一个人同时拥有这两者的风险?(这种 JSON 格式是否可行,或者在这种情况下我是否必须使用数组,例如"Thing": [ { ... }, { ... } ], ...
?
PS:我最后尝试使用上面的 JsonPath 如下:assertEquals("Yet Another Thing", JsonPath.read(json, "$.Things.Thing[?(@.ID == '123')].name"));
所以这也是异常可能来自的地方。另外,我最初在 JsonPath 邮件列表上问过这个问题,但到目前为止没有得到任何回复,所以希望我能更快地在这里得到帮助...... :)