您好,登錄后才能下訂單哦!
小編這次要給大家分享的是如何使用fastjson中的JSONPath處理json數(shù)據(jù),文章內(nèi)容豐富,感興趣的小伙伴可以來(lái)了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。
介紹
fastjson 1.2.0之后的版本支持JSONPath。,可以在java框架中當(dāng)作json對(duì)象查詢語(yǔ)言(OQL)來(lái)使用。
常用API
public class JSONPath { // 求值,靜態(tài)方法 public static Object eval(Object rootObject, String path); // 求值,靜態(tài)方法,按需計(jì)算,性能更好 public static Object extract(String json, String path); // 計(jì)算Size,Map非空元素個(gè)數(shù),對(duì)象非空元素個(gè)數(shù),Collection的Size,數(shù)組的長(zhǎng)度。其他無(wú)法求值返回-1 public static int size(Object rootObject, String path); // 是否包含,path中是否存在對(duì)象 public static boolean contains(Object rootObject, String path) { } // 是否包含,path中是否存在指定值,如果是集合或者數(shù)組,在集合中查找value是否存在 public static boolean containsValue(Object rootObject, String path, Object value) { } // 修改制定路徑的值,如果修改成功,返回true,否則返回false public static boolean set(Object rootObject, String path, Object value) {} // 在數(shù)組或者集合中添加元素 public static boolean arrayAdd(Object rootObject, String path, Object... values); // 獲取,Map的KeySet,對(duì)象非空屬性的名稱。數(shù)組、Collection等不支持類型返回null。 public static Set<?> keySet(Object rootObject, String path); }
使用
準(zhǔn)備json內(nèi)容如下:
取值操作
Object rootName = JSONPath.eval(json,"$.name"); System.out.println(rootName); Object rootArr = JSONPath.eval(json,"$.arr"); System.out.println(rootArr);
輸出:
zpl
[{"name":"zpl0","id":0},{"name":"zpl1","id":1},{"name":"zpl2","id":2},{"name":"zpl3","id":3},{"name":"zpl4","id":4}]
判斷操作
// 判斷有沒(méi)有id>2的內(nèi)容 boolean isExist = JSONPath.contains(json,"$[id>0]"); System.out.println(isExist); // 判斷有沒(méi)有id>6的內(nèi)容 isExist = JSONPath.contains(json,"$[id>1]"); System.out.println(isExist);
輸出
true
false
size操作
int size = JSONPath.size(json,"$.arr"); System.out.println(size);
輸出
5
寫(xiě)到這里,api和表達(dá)式不可能一一列舉,所謂舉一反三,表達(dá)式列舉如下:
JSONPath | 描述 |
---|---|
$ | 根對(duì)象,例如$.name |
[num] | 數(shù)組訪問(wèn),其中num是數(shù)字,可以是負(fù)數(shù)。例如$[0].leader.departments[-1].name |
[num0,num1,num2...] | 數(shù)組多個(gè)元素訪問(wèn),其中num是數(shù)字,可以是負(fù)數(shù),返回?cái)?shù)組中的多個(gè)元素。例如$[0,3,-2,5] |
[start:end] | 數(shù)組范圍訪問(wèn),其中start和end是開(kāi)始小表和結(jié)束下標(biāo),可以是負(fù)數(shù),返回?cái)?shù)組中的多個(gè)元素。例如$[0:5] |
[start:end :step] | 數(shù)組范圍訪問(wèn),其中start和end是開(kāi)始小表和結(jié)束下標(biāo),可以是負(fù)數(shù);step是步長(zhǎng),返回?cái)?shù)組中的多個(gè)元素。例如$[0:5:2] |
[?(key)] | 對(duì)象屬性非空過(guò)濾,例如$.departs[?(name)] |
[key > 123] | 數(shù)值類型對(duì)象屬性比較過(guò)濾,例如$.departs[id >= 123],比較操作符支持=,!=,>,>=,<,<= |
[key = '123'] | 字符串類型對(duì)象屬性比較過(guò)濾,例如$.departs[name = '123'],比較操作符支持=,!=,>,>=,<,<= |
[key like 'aa%'] | 字符串類型like過(guò)濾,例如$.departs[name like 'sz*'],通配符只支持% 支持not like |
[key rlike 'regexpr'] | 字符串類型正則匹配過(guò)濾,例如departs[name like 'aa(.)*'],正則語(yǔ)法為jdk的正則語(yǔ)法,支持not rlike |
[key in ('v0', 'v1')] | IN過(guò)濾, 支持字符串和數(shù)值類型 例如: .departs[name in ('wenshao','Yako')].departs[id not in (101,102)] |
[key between 234 and 456] | BETWEEN過(guò)濾, 支持?jǐn)?shù)值類型,支持not between 例如: .departs[id between 101 and 201].departs[id not between 101 and 201] |
length() 或者 size() | 數(shù)組長(zhǎng)度。例如$.values.size() 支持類型java.util.Map和java.util.Collection和數(shù)組 |
keySet() | 獲取Map的keySet或者對(duì)象的非空屬性名稱。例如$.val.keySet() 支持類型:Map和普通對(duì)象不支持:Collection和數(shù)組(返回null) |
. | 屬性訪問(wèn),例如$.name |
.. | deepScan屬性訪問(wèn),例如$..name |
對(duì)象的所有屬性,例如$.leader.*
['key'] | 屬性訪問(wèn)。例如['name']['key0','key1'] 多個(gè)屬性訪問(wèn)。例如['id','name']
更多內(nèi)容可參考github官網(wǎng):https://github.com/alibaba/fastjson/wiki/JSONPath
看完這篇關(guān)于如何使用fastjson中的JSONPath處理json數(shù)據(jù)的文章,如果覺(jué)得文章內(nèi)容寫(xiě)得不錯(cuò)的話,可以把它分享出去給更多人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。