反馈已提交

网络繁忙

JSONPath表达式

  • 文档创建者:Wendy123456
  • 历史版本:1
  • 最近更新:Wendy123456 于 2022-03-17
  • 1. 概述

    JsonPath 表达式可用于解析 JSON 结构的数据,官方 API 文档:https://github.com/json-path/JsonPath,本文仅为对英文官方文档的翻译。

    2. 基础运算符

    JsonPath 的根元素总是被称为 $,无论它是一个对象还是数组。

    在 JsonPath 表达式中,可以使用点符号,例如:$.store.book[0].title;也可以使用方括号,例如:$['store']['book'][0]['title']

    运算符描述

    $

    根元素
    . 或 []获取子元素

    如:store.book 或 store["book"]

    ..后代选择器,用来选取所有符合条件的元素
    [,]合并操作符,用于选取若干个元素

    如:book[0,1] 或 $..book[0].["category","author"]

    [start:end]切片运算符,索引的起始值为 0 ,左闭右开

    如:book[0:2] 或 book[-2:0]

    ?()

    过滤器标识,用于筛选数组,可以将过滤条件写在括号中
    @表示当前正在被过滤器处理的元素,通常和过滤器配合使用

    如:book[?(@.price<10)]

    *通配符。可以用于通配元素的名称或索引

    如:book.* 或 book[*]

     也可以和过滤结合使用,作为正则表达式的元素

    如:book[?(@.author =~ /.*ees/)]

    3. 过滤运算符

    过滤器是用于筛选数组的逻辑表达式,一个典型的过滤器是[?(@.age > 18)] ,其中,@ 表示当前正被过滤器处理的元素。通过加入逻辑运算符 && 和 || ,可以创造出更复杂的过滤器。字符串的值必须使用单引号或双引号括起来,如 ([?(@.color == 'blue')] [?(@.color == "blue")])

    运算符描述
    ==

    左右相等

    注:会对比数据类型,如 1 和 '1'  不相等

    !=左右不相等
    <左侧小于右侧
    <=左侧小于或等于右侧
    >左侧大于右侧
    >=左侧大于或等于右侧 
    =~左侧符合右侧的正则表达式

    如:[?(@.name =~ /foo.*?/i)]

    in左侧存在于右侧

    如:[?(@.size in ['S', 'M'])]

    nin

    左侧不存在于右侧

    subsetof

    左侧是右侧的子集

    如:[?(@.sizes subsetof ['S', 'M', 'L'])]

    anyof

    左侧和右侧有交集

    如:[?(@.sizes anyof ['M', 'L'])]

    noneof

    左侧和右侧没有交集

    如:[?(@.sizes noneof ['M', 'L'])]

    size

    左侧和右侧(数字/字符串)一样大

    empty

    左侧(数字/字符串)为空

    4. 函数

    可以在路径的末端调用函数。

    函数描述输出类型

    min()

    对于一个数值型数组,找到最小值

    双精度

    max()

    对于一个数值型数组,找到最大值

    双精度

    avg()

    对于一个数值型数组,求平均值

    双精度

    stddev()

    对于一个数值型数组,求标准差

    双精度

    length()

    求数组的长度

    整型

    sum()

    对于一个数值型数组,求总和

    双精度

    示例:

    假设有这样一个 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 表达式结果

    $.store.book[*].author

    找到 store 元素下的所有书籍,输出他们的作者

    $..author

    根元素下所有的作者

    $.store.*

    store 元素下所有的东西,无论是书籍还是自行车

    $.store..price

    store 元素下的所有东西的价格

    $..book[2]

    第 3 本书

    $..book[-2]

    倒数第 2 本书

    $..book[0,1]

    $..book[:2]

    前2本书

    $..book[:2]

    前2本书(注意:第一本书的索引是0)

    $..book[1:2]

    第2本书

    $..book[-2:]

    最后第2本和最后第1本书

    $..book[2:]

    第3到最后1本书

    $..book[?(@.isbn)]

    所有书籍中,含有 isbn 属性的书籍

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

    所有书籍中,价格低于10的书籍

    $..book[?(@.price <= $['expensive'])]

    所有数据中,价格没有超过 expensive 的书籍( expansive 的值为10)

    $..book[?(@.author =~ /.*REES/i)]

    找出符合正则表达式的书籍。

    此正则表达式的含义:作者名以REES结尾,REES不区分大小写

    $..*

    输出根元素下的所有内容

    $.store.book.length()

    书籍的总数




    附件列表


    主题: 数据开发
    • 有帮助
    • 没帮助
    • 只是浏览
    • 评价文档,奖励 1 ~ 100 随机 F 豆!

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭

    联系我们
    在线支持
    获取专业技术支持,快速帮助您解决问题
    工作日9:00-12:00,13:30-17:30在线
    页面反馈
    针对当前网页的建议、问题反馈
    售前咨询
    采购需求/获取报价/预约演示
    或拨打: 400-811-8890 转1
    qr
    热线电话
    咨询/故障救援热线:400-811-8890转2
    总裁办24H投诉:17312781526
    提交页面反馈
    仅适用于当前网页的意见收集,帆软产品问题请在 问答板块提问前往服务平台 获取技术支持