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

标签 json odata soapui jsonpath

使用来自 OData v4 API 响应的以下 JSON 对象:

{

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

这适用于选择数组中的对象:$.value[?(@.id == 123456789)]
使用这个 JSONPath 我可以获得属性“@odata.count”的值:$.['@odata.count']
但是如何使用“@odata.count”用表达式编写 JSONPath 呢?
例如。仅当计数大于 1 时才选择,这些表达式失败:
$.[('@odata.count' > 1)]
$.[?('@odata.count' > 1)]
$.[(@.['@odata.count'] > 1)]
... and a lot of other expressions

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

最终目标是在 SoapUI 测试套件断言中使用表达式。

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

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

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

这些表达式的结果是“2”:
$['@odata.count']
$..[0]['@odata.count']

此表达式产生一个空数组:
$..[?(@['@odata.count'] > 1)]

此表达式的结果为“null”:
?($['@odata.count'] > 1)

编辑 2:
我认为这个问题应该问得更笼统一些,更多的是关于“如何在 JSONPath 中使用响应的根属性/根属性/直接子级”。
我发现了一个类似的问题,但答案完全不同:Querying direct children of root element with jsonpath

最佳答案

好的,以下对我有用:
$..[?(@.['@odata.count'] > 1)]
它给了我与表达式 $.. 相同的数组(包含 json 响应的数组)。
根据我自己的发现,它的作用是:
$..[] - 查看包含响应的数组
?(@.['@odata.count'] > 1) - 选择包含值大于 1 的属性的数组项

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

看看在 SoapUI 中的测试套件断言中使用它的最终目标,从长远来看,以下内容可能更具可读性和可定制性(应该在 4 小时前使用 groovy 研究此解决方案......):

import groovy.json.JsonSlurper
jsonResponse = new JsonSlurper().parseText(context.response)
odatacount = "${jsonResponse.'@odata.count'}"
assert odatacount > 1

关于json - 如何在 JSONPath 表达式中使用 @odata.count 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55424313/

相关文章:

javascript - 在 Javascript 函数中设置 JSON 对象并将其传递给另一个函数

javascript - 如何缓存 OData 提要?

wcf - 如何实现自托管 WCF 数据服务 (http ://localhost:1234/myDataService. svc/...)

json - 使用Groovy脚本从JSON响应中一一打印特定节点的所有值

rest - soapUI:带有文件附件的多部分/表单数据 REST 请求

ios - Alamofire responseJSON 无法将 NSDictionary 类型的值转换为自定义对象

javascript - 以python 'JSON Array of arrays'格式遍历 'List of lists'

java - SOAPUI 4.5.1 无法生成 DH key 对

javascript - 如何像数据库一样浏览 JSON 产品?

mysql - 'Project3.x' 中的 EF OData MySql 未知列 'where clause'