JSONPath是一种用于从JSON(JavaScript Object Notation)数据中提取和操作数据的查询语言。它的设计灵感来自于XML的XPath,但专门用于JSON数据结构。
JSONPath使用美元符号($)表示JSON文档的根元素,然后使用点号(.)或方括号([])来访问子元素。
主要语法
$
: 根对象@
: 当前节点*
: 通配符,表示所有对象或元素.
: 子元素..
: 递归下降。必要时在任何地方可以使用名称[]
: 子元素或数组索引[start:end:step]
: 数组切片?()
: 过滤器表达式,表达式写在括号内
常用操作符
==
: 等于!=
: 不等于>
: 大于>=
: 大于等于<
: 小于<=
: 小于等于
示例
JSON数据:
{
"store": {
"book": [
{
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
},
{
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
}
}
JSONPath 表达式 | 说明 |
---|---|
$.store.book[*].author |
获取所有书籍的作者 |
$..author |
获取文档中的所有作者 |
$.store.* |
获取store下的所有内容 |
$.store..price |
获取store中所有的价格 |
$..book[2] |
获取第三本书(索引从0开始) |
$..book[?(@.price<10)] |
获取所有价格小于10的书 |
$..book[?(@.category=="fiction")] |
获取所有分类为fiction的书 |
$..book[-1] |
获取最后一本书 |
$..book[0,1] |
获取前两本书 |
$..book[:2] |
获取从索引0(包含)到索引2(不包含)的所有书 |
$..book[-2:] |
获取最后两本书 |
$..book[?(@.isbn)] |
获取所有有ISBN号的书 |
$.store.book[?(@.price > 10)] |
获取store中所有价格大于10的书 |
$..book[?(@.author =~ /.*Smith/i)] |
获取作者名字包含"Smith"的所有书(不区分大小写) |
$..* |
获取文档中的所有元素 |
$..book.length() |
获取书籍的数量 |
应用场景
JSONPath在许多场景下非常有用,例如:
实现
虽然JSONPath不是一个官方标准,但它在多种编程语言中都有实现,如JavaScript、Python、Java等。每种语言可能有略微不同的语法或额外的功能。
注意事项
更多推荐