1. 程式人生 > >JSONPath-簡單入門

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 允許使用萬用字元 * 表示所以的子元素名和陣列索引。還允許使用 '..' 從E4X參照過來的和陣列切分語法[start:end:step]是從ECMASCRIPT 4 參照過來的。
表示式在下面的指令碼語言中可以使用顯示的名稱或者索引:

$.store.book[(@.length-1)].title

使用'@'符號表示當前的物件,?(<判斷表示式>) 使用邏輯表示式來過濾。

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

這裡有個表格,說明JSONPath語法元素和對應XPath元素的對比。
XPath JSONPath Description
/ $ 表示根元素
. @  當前元素
/ . or [] 子元素
.. n/a 父元素
// .. 遞迴下降,JSONPath是從E4X借鑑的。
*
* 萬用字元,表示所有的元素
@ n/a  屬性訪問字元
[] [] 子元素操作符
| [,] 連線操作符在XPath 結果合併其它結點集合。JSONP允許name或者陣列索引。
n/a [start:end:step] 陣列分割操作從ES4借鑑。
[] ?() 應用過濾表示式
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] 前面的兩本書。
//book[isbn] $..book[?(@.isbn)]  過濾出所有的包含isbn的書。
//book[price<10] $..book[?(@.price<10)] 過濾出價格低於10的書。
//* $..* 所有元素。

相關推薦

JSONPath-簡單入門

JSONPath - 是xpath在json的應用。 xml最大的優點就有大量的工具可以分析,轉換,和選擇性的提取文件中的資料。XPath是這些最強大的工具之一。 如果可以使用xpath來解析json,以下的問題可以被解決: 1,資料不使用特殊的指令碼,可以在客戶端

webpack打包簡單入門

集合 簡單 入口 ges 顯示 技術分享 js文件 dir 配置結果 使用webPack前請先安裝nodejs webpack命令集合 安裝命令:npm install webpack -g 全局安裝npm install webpack --save-dev 當前項

require.js簡單入門

去掉 function syn ltr utf-8 js文件 turn set blog 推薦文章:http://www.ruanyifeng.com/blog/2012/11/require_js.html 1、以下例子主要實現功能,   1)引用jq庫獲取dom中元

ActiveMQ簡單入門

produce bsp knowledge 接收 prop 關閉 except conn dmi 一、創建一個簡單的Hello World案例 首先需要導入activemq-all-5.14.5.jar包,寫生產端: package com.ietree.mq.hello

Asp.Net MVC3 簡單入門詳解過濾器Filter

添加 重復 權限 組件 再次 ace text ext 開發 前言 在開發大項目的時候總會有相關的AOP面向切面編程的組件,而MVC(特指:Asp.Net MVC,以下皆同)項目中不想讓MVC開發人員去關心和寫類似身份驗證,日誌,異常,行為截取等這部分重復的代碼,那我們可以

Spring框架第一篇之簡單入門

其中 lan .org exp mage odi 只需要 需要 資源 一、下載Spring的jar包 通過http://repo.spring.io/release/org/springframework/spring/地址下載最新的Spring的zip包,當然,如果你是在

rxjs簡單入門

sheduler 使用 組裝 find res html poll uil article rxjs全名Reactive Extensions for JavaScript,Javascript的響應式擴展, 響應式的思路是把隨時間不斷變化的數據、狀態、事件等等轉成可被

JSTL簡單入門學習實例

out 簡單 items fun lib clas charset class dsm Maven依賴: <dependency> <groupId>javax.servlet<

gulp安裝+一個超簡單入門小demo

hang span pac 昨天 content expr ng- arch 什麽 gulp安裝參考、gulp安裝參考2、 一、NPM npm是node.js的包管理工具。主要功能是管理、更新、搜索、公布node的包。 Gulp是通過npm安裝的。 所以首先

MyBatis 介紹、簡單入門程序

jsb 處理 pla 編寫 red blog board nts 是否 JDBC 編程中的問題 1. 將 SQL 語句硬編碼到 Java 代碼。不利於系統維護。 設想怎樣解決:將SQL單獨抽取出來,在配置文件(xml方式、proper

struts2簡單入門-配置文件說明

default fig 常用 res ftw apach 入門 eth 核心 struts.xml 作用:配置struts中的action對象. 基本文件格式: <?xml version="1.0" encoding="UTF-8"?> <!DOC

WindowsService開發簡單入門

總結 簡介 pan 入門 mil wss -s 註意 宋體 一、簡介 1) 二、demo建立   1)   2)   3)   4)   5)   6)   7)   8)   9)   10) 三、總結及註意事項WindowsService開發簡單入門

Express4+Mongodb超簡單入門實例

conn ctype done ner lan shee 調試 pre nod 開始前,請確保mongodb已經能正常工作,安裝教程:windows下MongoDB的安裝及配置 , 請自行安裝配置。下面進入正文: 第一步:命令行創建數據庫、表,並插入一條數據 命令如下:

Scrapy簡單入門及實例講解

頁面 scheduler r12 images ide api 系列 允許 初始 原文地址:https://www.cnblogs.com/kongzhagen/p/6549053.html github地址:https://github.com/zhu-xb/scrapy

vue.js簡單入門

aries json ons htm 變更 .cn get com 一個 Vue.js是什麽? Vue.js 是一套構建用戶界面的漸進式框架。 與其他重量級框架不同的是,Vue 采用自底向上增量開發的設計。Vue 的核心庫只關註視圖層,它不僅易於上手,還便於與第三方庫

markdown簡單入門

空格 嵌套列表 小於號 tor 空行 tar 子列 href 內容 1.斜體和加粗: 使用下劃線"_"或"*"括起來 _內容_ or *內容* 1個_ 或 * 都是斜體,2個則是加粗; 3個既斜體 又加粗,4個以上則沒什麽變化 (難

Go語言並發編程簡單入門

go語言 並發編程 入門並發是邏輯上具備同時處理多個任務的能力,並行是在物理上的同一時刻執行多個並發任務。在單核處理器上,它們可以使用間隔的方式切換執行,並行則是依賴多核處理器的物理設備的特性。並行計算是並發設計的最理想模式。多線程或者多進程是並行的基本條件,但是單線程也可以用協程做到並發。盡管協程在單線

19 Go的全能ORM簡單入門

name 內存 uri 結合 無法 查看 文檔 word 源碼 gorm 昨天我的ldap賬戶改了以後,openfalcon(v2.1)-dashboard竟然無法登陸了!顯然,沒有把我的密碼同步到本地數據庫裏面,怎麽辦?只能改openfalcon用戶認證的源碼了,把lda

xpath簡單入門

pat concat school bsp class 技術 code pen .com 語法: 選取節點: 實例: (貼圖轉載自w3school) 補充: /a/@href #獲取a標簽的href屬性 當<div class="d

爬蟲簡單入門-接口尋找調用

sta for python import F12 調用 stat _for 新的 重新開始學習python,初心不變,抓取馬刺隊比賽數據。網易NBA的比賽數據寫死在頁面當中,且數據單一,於是改為解析NBA中國的網頁。首先找到馬刺隊數據頁面(http://c