JSONPath 表示式的使用

2022-06-15 18:48:11 字數 2144 閱讀 2333

一、jsonpath使用需要的包

com.jayway.jsonpath

json-path

2.4.0

二、使用說明

1、jsonpath是xpath在json的應用

2、jsonpath 是參照xpath表示式來解析xml文件的方式,json資料結構通常是匿名的並且不一定需要有根元素。

3、jsonpath 用乙個抽象的名字$來表示最外層物件

4、jsonpath 允許使用萬用字元 * 表示所以的子元素名和陣列索引

三、jsonpath表示式語法

jsonpath 表示式可以使用.符號解析json:

$.store.book[0].title

或者使用符號

$['store']['book'][0]['title']

四、測試例項

json檔案內容如下:

,

],"bicycle":

}}

首先,讀取json檔案,使用commons.io的 fileutils的readfiletostring方法:

string path =system.getproperty("user.dir")+file.separator+"testdata"+file.separator+"test.json";

string jsonstring = fileutils.readfiletostring(new file(path),"utf-8");

readcontext context = jsonpath.parse(json);

其次,輸出book[1]的author值。有兩種方法:

方法一:

jsonpath.read(json,"$.store.book[1].author");

或context.read("$.store.book[1].author");

輸出:evelyn waugh

方法二:

jsonpath.read(json,"$['store']['book'][1]['author']");

context.read("$['store']['book'][1]['author']");

輸出:evelyn waugh

//輸出book[*]中category == 'reference'的book

list categorys = context.read("$.store.book[?(@.category == 'reference')]");

for(object st: categorys)

輸出:

//輸出book[*]中price>10的book

list prices = context.read("$.store.book[?(@.price>10)]");

for(object p:prices)

輸出:

//bicycle[*]中含有color元素的bicycle

list color = context.read("$.store.bicycle[?(@.color)]");

for(object is :color)

輸出://

//輸出該json中所有price的值

list pp = context.read("$..price");

for(object p :pp)

輸出: 8.95 12.99 19.95

list authors = context.read("$.store.book[*].author");

for (string str : authors)

輸出:nigel rees evelyn waugh

五、xpath 和 jsonpath獲取元素的方法比較

在xpath表示式總是從前面的路徑來運算元組,索引是從1開始。

使用josnpath的操作符操作乙個物件或者陣列,索引是從0開始。

表示式 表示式樹 表示式求值

總時間限制 1000ms 記憶體限制 65535kb 描述 眾所周知,任何乙個表示式,都可以用一棵表示式樹來表示。例如,表示式a b c,可以表示為如下的表示式樹 a b c 現在,給你乙個中綴表示式,這個中綴表示式用變數來表示 不含數字 請你將這個中綴表示式用表示式二叉樹的形式輸出出來。輸入輸入分...

Mssql merge表示式的使用

基本語法格式 merge into target table 目標表 using source table 源表 on condition 匹配條件 when matched then sql語句 when not matched then sql語句 when not matched by sou...

java Lambda表示式的使用

如題,因為博主也是最近才接觸到lambda表示式的 ps 在這裡汗顏一會 我並不會講解它的原理,誠然任何一件事物如果理解原理的話,使用它必將更加容易。但博主在學習的時候,大多數時候都是學會怎麼用,然後在細究原理。就像你騎自行車之前,難道首先還要研究自行車的原理麼?首先lambda表示式的最簡單應用如...