溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何使用fastjson中的JSONPath處理json數(shù)據(jù)

發(fā)布時(shí)間:2020-07-29 11:58:29 來(lái)源:億速云 閱讀:300 作者:小豬 欄目:編程語(yǔ)言

小編這次要給大家分享的是如何使用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<&#63;> 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]
[&#63;(key)]對(duì)象屬性非空過(guò)濾,例如$.departs[&#63;(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ò)的話,可以把它分享出去給更多人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI