JSONPath 是一种用于查询 JSON 结构的查询语言。
例如,查询商店中所有书籍的标题
$.store.book[*].title
$
选择根元素.
选择当前元素的子元素*
选择对象或数组内的所有元素
注意: JSON API 数据源使用 JSONPath Plus 包来评估 JSONPath 表达式。JSONPath Plus 扩展了原始规范,增加了额外功能。有关支持的语法详情,请参考 项目页面。
过滤器
注意: 自 1.3.4 版本起,不再支持过滤器。
如果您的仪表盘当前依赖包含子表达式的 JSONPath 查询,有几种可能的迁移路径
- 对于使用子表达式进行索引/切片的简单查询,可能可以重写查询而不使用子表达式,例如
[(@.length-1)]
也可以表示为[:-1]
。 - 对于更复杂的查询,我们建议切换到
jsonata
语言,插件也支持该语言。该语言与 JSONPath 具有相似的功能,包括支持过滤器表达式(在文档中称为“谓词”)。 - 如果修改现有查询不可行,社区插件 “Infinity” 支持 JSONPath 表达式,包括在使用
backend
解析器选项时支持过滤器和子表达式。请注意,Infinity 是社区支持的插件。
过滤器允许您基于逻辑表达式查询元素。
例如,查询价格超过 10 的书籍标题
$.store.book[?(@.price > 10)].title
?()
定义一个过滤器表达式@
选择当前正在处理的元素
过滤器表达式支持一组布尔和逻辑操作
- 布尔操作:
!
,&&
,||
- 比较:
>
,<
,>=
,<=
- 相等:
==
,!=
$.store.book[?(@.price < 10)] // Books that are cheaper than 10
$.store.book[?(@.category == 'fiction')] // Books that have the fiction category
$.store.book[?(@.isbn)] // Books that have a ISBN number
$.store.book[?(@.price < 10 && @.category == 'fiction')] // Cheap fiction books