JsonPath 简介

785 阅读1分钟

语法

JsonPath 语法简单描述
$根节点
@当前节点
.or[]子节点
..选择所有符合条件的节点
*所有节点
[]迭代器标示,如数组下标
[,]支持迭代器中做多选
[start:end]数组切片运算符
?()支持过滤操作
()支持表达式计算

例子

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",
            "author":"DC-bicycle",
            "price": 19.95
        }
    },
    "expensive": 10,
    "author":"DC-store",
    "price": 33.33
}

以上面 json 数据为例,说明 JsonPath 语法使用:

JsonPath 表达式描述
$.store.book[*].authorstore.book节点下所有的author
$..author所有的 author
$.store.*store节点下所有的值,包括bookbicycle
$.store..pricestore节点下所有的price
$..book[2]第三个book
$..book[-2]倒数第二个book
$..book[0,1]第一个、第二个book
$..book[:2]下标0到2的book
$..book[1:2]下标1到2的book
$..book[-2:]最后2个book
$..book[2:]下标2的book到最后
$..book[?(@.isbn)]所有含有isbnbook
$.store.book[?(@.price < 10)]store节点下,price小于10的book
$..book[?(@.price <= $['expensive'])]store节点下,不是"expensive"的book
$..book[?(@.author =~ /.*REES/i)]匹配正则表达式/.*REES/ibook
$..*每个节点都输出一次
$..book.length()book的数目

PS:以上 JsonPath 可在这里验证正确性