JSONPath運算式

  • 文档创建者:Wendy123456
  • 历史版本:3
  • 最近更新:Nikozhan 于 2025-03-03
  • 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 豆!