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

如何在 JSONPath 表达式中使用 @odata.count 属性?

翟奇
2023-03-14

从OData v4 API的响应中使用以下JSON对象:

{

   "@odata.context": "https://api.asdfasdf.com/",
   "@odata.count": 2,
   "value": [
        {
            "id": 123456789,
            "name": "Random name"
        },
        {
            "id": 15345,
            "name": "Random name2"
        }
    ]
}

这用于选择数组中的对象:<code>$.value[?(@.id==123456789)]

使用此JSONPath,我可以获得属性“@odata.count”的值:<code>$.“@odataa.count”]

但是如何使用“@odata.count”的表达式编写JSONPath?例如。仅当计数大于 1 时才选择,以下表达式将失败:

$.[('@odata.count' > 1)]
$.[?('@odata.count' > 1)]
$.[(@.['@odata.count'] > 1)]
... and a lot of other expressions

我坚信我正在研究的json深度与我想象的不同,属性的命名约定(以及选择它的方式)让我发疯。

最终目标是在SoapUI Testsuite断言中使用表达式。

将响应中的“@odata.count”属性与我们的测试数据进行比较。

编辑:通过删除数字后的引号修复了json,感谢评论者。

以及帮助我找到解决方案的其他表达式发现:

这些表达式导致“2”:

$['@odata.count']
$..[0]['@odata.count']

此表达式导致空数组:

$..[?(@['@odata.count'] > 1)]

该表达式产生的值为“null”:

?($['@odata.count'] > 1)

编辑2:这个问题应该问得更一般一点,我认为,它更多的是关于“如何在JSONPath中使用根属性/根属性/响应的直接子级”。我发现了一个类似的问题,答案完全不同:用jsonpath查询根元素的直接子元素

共有1个答案

越心水
2023-03-14

好吧,以下是我的工作:

$..[?(@.['@odata.count']

它给出了与表达式< code>$相同的数组..(包含json响应的数组)。根据我自己的发现,它的作用是:

$...[]-查看包含响应的数组

<代码>?(@.['@odata.count']

如果我错了,请纠正我。我只是不明白第三个点,即八个字符的区别。由于属性的名称,我认为在使用括号符号时不需要它。

看看在SoapUI中的测试套件的断言中使用它的最终目标,从长远来看,以下内容可能更具可读性和可定制性(应该在4小时前用时髦的独奏研究过这个问题......):

import groovy.json.JsonSlurper
jsonResponse = new JsonSlurper().parseText(context.response)
odatacount = "${jsonResponse.'@odata.count'}"
assert odatacount > 1
 类似资料:
  • 我在尝试使用lambda表达式时遇到了这个错误。

  • EL表达式可以使用在任何接收动态内容的标签属性中。在这些属性中既可以只包含一个的EL表达式,也可以包含多个EL表达式和静态文本。 标签属性中只包含一个EL表达式的语法如下: <prefix:tag value = "${表达式}" /> 下面是标签属性包含一个单独EL表达式的示例代码: <jsp:setProperty property="age" name = "myBean" value="$

  • 问题内容: 使用Sequelize ORM for Node.js,如何在select语句中使用CASE / WHEN表达式? 根据Sequelize文档,我看不到任何参考或示例来使用SQL表达式CASE。这可能吗? 这是我的示例: 的SQL 续集 数据库结构 预期结果: 问题答案: 您可以使用Sequelize.literal在建立特殊查询

  • 本文向大家介绍如何在TestNG中使用正则表达式?,包括了如何在TestNG中使用正则表达式?的使用技巧和注意事项,需要的朋友参考一下 我们在TestNG中使用正则表达式来使用以某种模式命名的一组测试方法。 示例 Testng xml文件。 所有名称开头为Payment的测试方法都将从回归套件中排除。 示例 Login()将被执行,但是所有以名字Payment开头的方法都将被排除在执行之外。这是使

  • 在使用带有xpath的正则表达式时,我对jayway jsonpath有意见。以下是我的json: 下面是我的表达式:resources[?(/_test1.CREDITPRINTFILE/.test(@.name))] 我得到以下错误: 我也尝试在在线评估工具中使用同样的表达:https://jsonpath.herokuapp.com/ Jayway-给出了相同的错误-预期路径节点Gatlin

  • 问题内容: 我有这样的字符串: 而且我只需要使用regexp的href值提取: 每次的href值也可以不同,可以更长或更短 问题答案: 假设myString包含带有元素的字符串。 由于href属性不能嵌套,因此应该没问题,并且不需要完整的HTML解析器。一个限制是它只能在双引号中找到href属性。