JSONPath 语法参考

什么是 JSONPath?

JSONPath 是一种用于从 JSON 文档中提取数据的查询语言,类似于 XML 的 XPath。它提供了一种简单的方式来导航和提取 JSON 结构中的数据。

基本语法

表达式 描述 示例
$ 根对象或元素 $.store.book[0].title
@ 当前对象或元素(在过滤表达式中使用) $.store.book[?(@.price < 10)]
.[] 子元素操作符 $.store.book[0].title$['store']['book'][0]['title']
* 通配符,匹配所有元素 $.store.book[*].author
.. 递归下降,搜索所有层次 $..author
[start:end:step] 数组切片操作 $.store.book[0:3]
?(expression) 过滤表达式 $.store.book[?(@.price < 10)]

示例 JSON

以下示例将使用这个 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
            },
            {
                "category": "fiction",
                "author": "Herman Melville",
                "title": "Moby Dick",
                "isbn": "0-553-21311-3",
                "price": 8.99
            },
            {
                "category": "fiction",
                "author": "J.R.R. Tolkien",
                "title": "The Lord of the Rings",
                "isbn": "0-395-19395-8",
                "price": 22.99
            }
        ],
        "bicycle": {
            "color": "red",
            "price": 19.95
        }
    },
    "expensive": 10
}

JSONPath 示例

1. 获取所有书籍的作者

JSONPath: $.store.book[*].author

结果: ["Nigel Rees", "Evelyn Waugh", "Herman Melville", "J.R.R. Tolkien"]

2. 获取所有作者(递归搜索)

JSONPath: $..author

结果: ["Nigel Rees", "Evelyn Waugh", "Herman Melville", "J.R.R. Tolkien"]

3. 获取 store 中的所有元素

JSONPath: $.store.*

结果: [book数组, bicycle对象]

4. 获取所有书籍的价格

JSONPath: $.store.book[*].price

结果: [8.95, 12.99, 8.99, 22.99]

5. 获取第三本书

JSONPath: $.store.book[2]

结果: {"category": "fiction", "author": "Herman Melville", "title": "Moby Dick", "isbn": "0-553-21311-3", "price": 8.99}

6. 获取最后一本书

JSONPath: $.store.book[-1]

结果: {"category": "fiction", "author": "J.R.R. Tolkien", "title": "The Lord of the Rings", "isbn": "0-395-19395-8", "price": 22.99}

7. 获取前两本书

JSONPath: $.store.book[0:2]

结果: [第一本书, 第二本书]

8. 过滤价格低于 10 的书籍

JSONPath: $.store.book[?(@.price < 10)]

结果: [第一本书, 第三本书]

9. 获取所有有 ISBN 的书籍

JSONPath: $.store.book[?(@.isbn)]

结果: [第三本书, 第四本书]

10. 获取所有价格高于 expensive 值的书籍

JSONPath: $.store.book[?(@.price > $.expensive)]

结果: [第二本书, 第四本书]

JSONPath 实现

JSONPath 有多种编程语言的实现:

注意:不同实现之间可能有细微的语法差异,请参考具体实现的文档。