JSOnPath-簡単な入門

5058 ワード

原文:http://goessner.net/articles/JsonPath/
  • JSOnPath-はxpathのjsonでの応用である.

  • xmlの最大の利点は、ドキュメント内のデータを分析、変換、選択的に抽出するツールがたくさんあることです.XPathはこれらの最も強力なツールの一つです.
    xpathを使用してjsonを解析できる場合は、次の問題を解決できます.
    1,データは特殊なスクリプトを用いず,クライアントで対話的に発見して取得することができる.
    2クライアントが要求するJSONデータをサーバ上の関連部分に減少させることで、サーバ応答の帯域幅使用率を最大限に減少させることができる.
    もし私たちが望むならば、このjsonデータを解析できるツールは意味があります.それに伴う問題は、それがどのように動作するか、jsonpathの式がどのように見えるかです.
    実際,jsonはcシステムプログラミング言語によって自然データを表し,jsonデータにアクセスする特定の言語の特定の構文がある.
    xpathの式:
    /store/book[1]/title
    私たちは次のように見ることができます.
    x.store.book[0].title
    または
    x['store']['book'][0]['title']
    Javascriptでは、PythonとPHPの変数xがjsonデータを表します.観察によると、特定の言語にはxpathが内蔵されてデータを解析している.
    JSOnPathツールの問題
    -特定の言語に依存する
    -XPath 1.0に依存する必要がある
    -コード量とメモリ消費量の削減
    -実行時
              
  • JSOnPath式
  • JSOnPathは、xpath式を参照してxmlドキュメントを解析する方法であり、jsonデータ構造は通常匿名であり、ルート要素が必要とされない.JSOnPahtは抽象的な名前$で最外層オブジェクトを表します.
    JOSNPath式は使用可能である. 記号は次のとおりです.$.store.book[0].title
    または[]記号を使用する$['store']['book'][0]['title']
    入力経路から見ると.内部または出力のパスは、-シンボルに変換されます.
    JSOnPathでは、ワイルドカード*を使用して、サブエレメント名と配列インデックスを表すことができます.また、'..'を使用してE 4 Xから参照された和配列分割構文を使用することもできます.[start:end:step] ECMASCRIPT 4 。
    式は、次のスクリプト言語で表示される名前またはインデックスを使用できます.$.store.book[(@.length-1)].title
    '@'記号を使用して現在のオブジェクトを表します.()論理式を使用してフィルタ処理します.$.store.book[?(@.price < 10)].title
    JSOnPath構文要素と対応するXPath要素の比較を示す表があります.
    XPath
    JSONPath
    Description
    /
    $
    ルート要素を表す
    .
    @
     現在の要素
    /
    . or []
    サブエレメント
    ..
    n/a
    親要素
    //
    ..
    再帰的に下がり、JSOnPathはE 4 Xから参考にした.
    *
    *
    すべての要素を表すワイルドカード
    @
    n/a
     属性アクセス文字
    []
    []
    サブエレメントオペレータ
    |
    [,]
    接続オペレータは、XPath結果で他のノードセットを結合します.JSONPは、nameまたは配列インデックスを許可します.
    n/a
    [start:end:step]
    配列分割操作はES 4から参考にした.
    []
    ?()
    フィルタ表示の適用
    n/a
    ()
    スクリプトエンジンの下に使用されるスクリプト式.
    ()
    n/a
    Xpathグループ
    XPathには多くの構文(ローカルパス、オペレータ、関数)がここにリストされていません.xpathとjsonpathスクリプトの違いさえ分かればいい.
  • []xpath式は常に前のパスから配列を操作し、インデックスは1から始まる.
  • JOSNPathの[]オペレータを使用してオブジェクトまたは配列を操作します.インデックスは0から始まります.
  • SONPath例
  • 次にjsonpathが表す例を見てみましょう.次は簡単なjsonデータ構造が書店を表しています(元のxmlファイルは)
    { "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
        }
      }
    }
    

    XPath
    JSONPath
    結果/store/book/author $.store.book[*].author
    本点すべての本の作者//author $..author
    すべての作者/store/* $.store.*
    storeのすべての要素.すべてのbookstとbicycle/store//price $.store..price
    storeの中のすべてのもののprice//book[3] $..book[2]
    三つ目の本//book[last()] $..book[(@.length-1)]
    最後の本//book[position()<3] $..book[0,1] $..book[:2]
    前の2冊の本.//book[isbn] $..book[?(@.isbn)]
     isbnを含むすべての本をフィルタします.//book[price<10] $..book[?(@.price<10)]
    価格が10以下の本を濾過する.//* $..*
    すべての要素.