当前位置: 首页 > 知识库问答 >
问题:

用于REST-fetching路径的值列表

栾钟展
2023-03-14

我正在使用REST-Assured测试一些restfulweb服务。以下是我的JSON:

{
    "status":true,
    "responseData":{
        "orderLevelReasons":[
            {
                "reasons":[
                    {
                        "reasonId":"129cfea8-b022-4dc8-9811-222a324f46aa",
                        "reasonName":"COD Amount Mismatch"
                    },
                    {
                        "reasonId":"a881fd5c-626e-438c-8026-646aa2a19098",
                        "reasonName":"Gave wrong information"
                    },
                    {
                        "reasonId":"543d438a-88cc-487c-86e4-19eecefa9ca7",
                        "reasonName":"Late delivery"
                    },
                    {
                        "reasonId":"080cd7c1-7a37-48ad-9090-57286d93ea41",
                        "reasonName":"Parcel not received"
                    },
                    {
                        "reasonId":"5ca3d9b4-0fa2-49da-a534-a6f2e7eccc07",
                        "reasonName":"Staff did not inform about the parcel arrival"
                    }
                ],
                "issueName":"ISSUE TYPE 1",
                "issueId":"0c2c37a6-62b6-4c28-ab6c-566487d045bd",
                "hint":""
            },
            {
                "reasons":[
                    {
                        "reasonId":"129cfea8-b022-4dc8-9811-222a324f46aa",
                        "reasonName":"COD Amount Mismatch"
                    },
                    {
                        "reasonId":"14975b5d-23fb-4735-8082-2e02d6335788",
                        "reasonName":"Data issue"
                    },
                    {
                        "reasonId":"7e6e8446-3774-4589-9171-8e7ab0a7f73b",
                        "reasonName":"Delivery BOY did not inform before delivering"
                    },
                    {
                        "reasonId":"543d438a-88cc-487c-86e4-19eecefa9ca7",
                        "reasonName":"Late delivery"
                    },
                    {
                        "reasonId":"080cd7c1-7a37-48ad-9090-57286d93ea41",
                        "reasonName":"Parcel not received"
                    },
                    {
                        "reasonId":"8e430c71-f28b-49e4-9946-e0bd5131768b",
                        "reasonName":"Refuse to come doorstep"
                    },
                    {
                        "reasonId":"515d0fa4-a44c-47eb-a7a2-5ddae778f37a",
                        "reasonName":"Extra Amount taken By Partner Staff"
                    }
                ],
                "issueName":"ISSUE TYPE 2",
                "issueId":"ac902377-3db2-462a-8e53-48b06d1aff1f",
                "hint":""
            }
        ],
        "productLevelReasons":[
            {
                "reasons":[
                    {
                        "reasonId":"6129dcb8-1ae5-4d7d-9c95-4c0ec2f69ded",
                        "reasonName":"Some reason1"
                    },
                    {
                        "reasonId":"febec32b-b243-4509-b46a-20d9f4747ca3",
                        "reasonName":"Some reason2"
                    },
                    {
                        "reasonId":"d8a492b8-f816-41e6-b45d-5ec29f3a0785",
                        "reasonName":"Some reason3"
                    },
                    {
                        "reasonId":"c0c98489-6401-455a-9145-f52664d8aff4",
                        "reasonName":"Some reason4"
                    },
                    {
                        "reasonId":"ef2b4147-ee76-4961-b784-63e848a84167",
                        "reasonName":"Some reason5"
                    },
                    {
                        "reasonId":"7f4f9657-17b2-407b-aed7-16b221bf3229",
                        "reasonName":"Some reason6"
                    },
                    {
                        "reasonId":"2aa83be6-60cb-43dc-9273-c41e6047315e",
                        "reasonName":"Others"
                    },
                    {
                        "reasonId":"c432f563-f835-4710-8055-5ee9e0fe1409",
                        "reasonName":"Some reason7"
                    }
                ],
                "orderItemName":"Item1",
                "orderItemId":961253,
                "hint":""
            }
        ]
    },
    "message":"OK"
}

我想取:

  1. responseData下所有reasonId值的列表。订单级别原因
  2. responseData下所有reasonId值的列表。productLevelReasons其中,orderItemId961253(因为多个orderItemId可能存在productLevelReasons

我在谷歌上搜索了很多,发现这可以通过使用JsonPath来实现,但我无法弄清楚对于我的每一个目的,JsonPath表达式到底是什么。

共有1个答案

程鸿煊
2023-03-14

响应ata.orderLevelReasons下的所有原因值列表

$.responseData.orderLevelReasons[*].reasons[*].reasonId

如果要从orderLevelReasons集合中的所有项中查找原因,则必须使用[*]for orderLevelReasons。如果不是,您可以将其替换为[0],并可以得到一个不同的列表(假设每个OrderLevelReasions重复相同的原因)。

responseData下所有reasonId值的列表。productLevelReasons,其中orderItemId为961253(因为多个orderItemId可能有productLevelReasons)。

$.responseData.productLevelReasons[?(@.orderItemId=='961253')].reasons[*].reasonId

这也是不明确的。如果可能存在重复的原因,您需要删除重复。

我在jsonpath.curiousconcept.com验证了两个JsonPath表达式,它们都是有效的。但是Java代码由于某种原因会出错。

我已经调查过了。放心框架实际上并没有实现JsonPath,而是为JSON实现了一种专有的基于路径的查询语法。不幸的是,这个名字是一样的,但实际上是基于一个完全不同的标准。

本文档页面说明:

请注意,JsonPath实现使用Groovy的GPath语法,不要与Jayway的JsonPath实现混淆。

StackOverflow上的JsonPath标记与已接受的JsonPath规范有关,而不是与rest规范有关。

根据我的研究,我会得出结论,放心的jsonpath实现不支持您的需求。您应该使用这样的实现,例如Jayway的实现。

 类似资料:
  • 我花了很多时间试图找出如何编写符合我需求的json路径,但没有成功。我希望有人能帮助我。 我有一个非常简单的JSON对象,看起来像:,请注意,这不是对象列表 我正在尝试查找一个JSON路径,该路径在编写代码时返回[%code%] 我找到了<代码>$[?( @.代码 遗憾的是,我正在做的项目使用了带有Goessner实现的jsonpath库。有人知道jsonpath可以用于任何实现吗? 谢谢

  • 通过创建一个扩展RepositoryRestMvcConfiguration的Java配置类,并将@RestResource添加到存储库中,我将Spring Data Rest(2.0)添加到了现有的Spring MVC应用程序中。 是否可以更改Rest API的基本URL?例如: 我试图使用setBaseURI重写configureRepositoryRestConfiguration,但它似乎

  • 我的目标是开发一个单一的骆驼路线来映射这些服务器,接受路径中服务器的名称。类似于这样: 我的(简化且不起作用)Blueprint.xml: 问题是,我不知道如何从路径中移除/center、/north或/south,因此头部被传递给目标服务,而目标服务不知道如何处理它。调用:

  • 我正在开发一种Rest服务,我正在努力遵守罗伊·菲尔丁医生的惯例和指导原则。 我将我的服务想象成公开一组资源的endpoint。资源由URI标识,api客户端可以使用HTTP语义学(即不同的HTTP动词映射到URI上的相应操作)来操作资源。 指导方针指出,这些URI应该以分层的方式定义,以反映对象层次结构。这在资源创建中非常有用,因为在后端,我们需要数据来执行创建操作。然而,在进一步的操作中,UR

  • 问题内容: 如何在SQL Server中解析包含URL路径值的列? 输入 应该返回: 每行的路径值不同 问题答案: 如果您拥有已知的或最大数量的级别,则可以使用一些XML。 如果未知,则必须动态进行。 例子 退货

  • 基于路径的授权 Apache和svnserve都可以给用户赋予(或拒绝)访问许可,通常是对整个版本库:一个用户可以读版本库(或不),而且他可以写版本库(或不)。如果可能,也可以定义细粒度的访问规则。一组用户可以有版本库的一个目录的读写权限,但是没有其它的;另一个目录可以是只对一少部分用户可读。 两种服务器都使用同样的文件格式描述路径为基础的规则,如果是Apache,需要加载mod_authz_sv