如何用JSONata查询匹配条件的同级label属性
解决JSONata查询获取指定label的问题
给定JSON结构
[ { "id": "0oa3nfof0kFRol89o1d7", "name": "saasure", "label": "Console", "status": "ACTIVE", "lastUpdated": "2022-06-20T19:34:29.000Z", "created": "2022-05-10T22:24:40.000Z", "accessibility": { "selfService": false, "errorRedirectUrl": null, "loginRedirectUrl": null }, "visibility": { "autoSubmitToolbar": false, "hide": [ "firstName", "lastName" ], "appLinks": { "admin": true } } }, { "id": "0oa3nfof2kbmp9TVH1d7", "name": "enduser", "label": "Dashboard", "status": "ACTIVE", "lastUpdated": "2022-06-20T19:34:29.000Z", "created": "2022-05-10T22:24:42.000Z", "accessibility": { "selfService": false, "errorRedirectUrl": null, "loginRedirectUrl": null }, "visibility": { "autoSubmitToolbar": false, "hide": [ "lastName" ], "appLinks": {} } } ]
需求
仅返回visibility.hide数组中包含"firstName"的对象的label属性。
正确的JSONata查询
需要先筛选顶层数组中符合条件的对象,再提取对应的label,而非先定位visibility节点再回溯父级。提供两种可行写法:
写法1(使用contains)
$[visibility.hide contains "firstName"].label
写法2(使用in)
$["firstName" in visibility.hide].label
之前查询的问题分析
你之前的查询visibility["firstName" in hide].{'label' : %.label}会返回所有label,原因是:
- 先遍历数组中所有对象的
visibility节点,筛选出符合条件的visibility - 对每个符合条件的
visibility,用%获取其父级(顶层对象)的label,但遍历范围是所有visibility,回溯父级时逻辑覆盖了全部对象,最终返回了所有label。
正确思路是从顶层数组入手,直接筛选满足"firstName" in visibility.hide的对象,再提取它们的label,就能精准得到目标结果。
内容的提问来源于stack exchange,提问作者Norm
相关产品推荐
相关产品推荐

