gpt4 book ai didi

java - 如何断言 JSON 节点具有分配给它们某些值的子节点?

转载 作者:太空宇宙 更新时间:2023-11-04 06:59:30 24 4
gpt4 key购买 nike

我有一个如下所示的 JSON 字符串:

json =  "{\"Things\": \n" +
" {\"Thing\": {\n" +
" \"ID\":\"123\",\n" +
" \"name\":\"Yet Another Thing\",\n" +
" \"price\":\"$12.99\",\n" }\n" +
" }\n" +
"}";

有没有办法可以断言ThingID123并且它的name相同声明/断言中是“Yet Another Thing”?

目前,我似乎无法使用过滤器:

JsonPath.read(json, "$.Things.Thing[?(@.ID == '123')].name")

我收到以下异常:

java.lang.IllegalArgumentException: Invalid container object

这可能是因为上面的 JSON 字符串中没有数组符号 [] 吗?应该有吗?

在相关说明中,是否有关于使用 Hamcrest(带有 JSON 断言)的详细介绍?我知道官方教程,但我似乎总是弄错......

更新:这样做的理由是:如果我返回几个 Thing 元素,而我无法保证其顺序(因此我无法匹配 Thing[1] (除非我循环遍历所有元素))怎么办?如何确保一个元素具有正确的 ID 和正确的名称?如果我单独检查子项,是否会冒这样的风险:一个 Thing 具有正确的名称,另一个具有正确的 ID,但没有一个具有正确的名称? (使用 JSON 格式是否可行,或者在这种情况下我必须使用数组,例如 "Thing": [ { ... }, { ... } ], ...

P.S.:我最终尝试按如下方式使用上面的 JsonPath: assertEquals("Yet Another Thing", JsonPath.read(json, "$.Things.Thing[?(@.ID == '123')].name"));所以这也可能是异常的来源。另外,我最初在 JsonPath 邮件列表上提出了这个问题,但到目前为止没有得到任何答复,所以希望我可以更快地在这里获得帮助......:)

最佳答案

本教程似乎为您的问题提供了解决方案:

JsonAssert.with(json).assertThat("$.Things.Thing.ID", Matchers.equalTo("123"))
.assertThat("$.Things.Thing.name", Matchers.equalTo("Yet Another Thing"));

关于java - 如何断言 JSON 节点具有分配给它们某些值的子节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22306010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com