菜单
开源 Grafana Cloud

JSONPath 是一种用于查询 JSON 结构的查询语言。

例如,查询商店中所有书籍的标题

js
$.store.book[*].title
  • $ 选择根元素
  • . 选择当前元素的子元素
  • * 选择对象或数组内的所有元素

注意: JSON API 数据源使用 JSONPath Plus 包来评估 JSONPath 表达式。JSONPath Plus 扩展了原始规范,增加了额外功能。有关支持的语法详情,请参考 项目页面

过滤器

注意: 自 1.3.4 版本起,不再支持过滤器。

如果您的仪表盘当前依赖包含子表达式的 JSONPath 查询,有几种可能的迁移路径

  1. 对于使用子表达式进行索引/切片的简单查询,可能可以重写查询而不使用子表达式,例如 [(@.length-1)] 也可以表示为 [:-1]
  2. 对于更复杂的查询,我们建议切换到 jsonata 语言,插件也支持该语言。该语言与 JSONPath 具有相似的功能,包括支持过滤器表达式(在文档中称为“谓词”)。
  3. 如果修改现有查询不可行,社区插件 “Infinity” 支持 JSONPath 表达式,包括在使用 backend 解析器选项时支持过滤器和子表达式。请注意,Infinity 是社区支持的插件。

过滤器允许您基于逻辑表达式查询元素。

例如,查询价格超过 10 的书籍标题

js
$.store.book[?(@.price > 10)].title
  • ?() 定义一个过滤器表达式
  • @ 选择当前正在处理的元素

过滤器表达式支持一组布尔和逻辑操作

  • 布尔操作:!, &&, ||
  • 比较:>, <, >=, <=
  • 相等:==, !=
js
$.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