常用语法
表达式 说明 $ 表示根元素 $.key 选择根元素下的指定键名的值 $.* 选择根元素下的所有属性值 $.array[*] 选择根元素中的数组的所有元素 $.key[subkey] 选择根元素中的键名为key,子键名为subkey的值 $.key[*].subkey 选择根元素中的键名为key的所有元素的子键名为subkey的值
过滤表达式
表达式 说明 $.key[?(@.subkey == value)] 选择根元素中key为指定值且具有subkey并且值等于value的元素 $.array[?(@.value > 10)] 选择根元素中值大于10的数组元素
范围表达式
表达式 说明 $.array[start:end] 选择根元素中从start索引到end索引之间的数组元素 $.array[:end] 选择根元素中从开头到end索引之间的数组元素 $.array[start:] 选择根元素中从start索引到末尾的数组元素
通配符表达式
表达式 说明 $.* 选择根元素下的所有键值对 $…key 选择根元素和所有子元素中的具有指定键名的值
操作符表达式
表达式 说明 $.key[?(@.value > 10 && @.value < 20)] 选择根元素中值大于10且小于20的key $.key[?(@.name =~ /pattern/)] 选择根元素中name符合正则表达式pattern的key
操作实战
json数据
{ "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 , "isbn" : "0-553-21311-3" } ] , "bicycle" : { "color" : "red" , "price" : 19.95 } }
}
引入依赖
< dependency> < groupId> com.alibaba.fastjson2</ groupId> < artifactId> fastjson2</ artifactId> < version> 2.0.40</ version> </ dependency>
示例
public static void main ( String [ ] args) { String jsonStr = "{ \"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,\"isbn\": \"0-553-21311-3\"" + "}],\"bicycle\": {\"color\": \"red\",\"price\": 19.95}}}" ; JSONObject jsonObject = JSON . parseObject ( jsonStr) ; System . out. println ( jsonStr) ; System . out. println ( "book数目:" + JSONPath . eval ( jsonObject, "$.store.book.size()" ) ) ; System . out. println ( "第一本书的title:" + JSONPath . eval ( jsonObject, "$.store.book[0].title" ) ) ; System . out. println ( "第一本书的category和author:" + JSONPath . eval ( jsonObject, "$.store.book[0]['category','author']" ) ) ; System . out. println ( "price>10的书:" + JSONPath . eval ( jsonObject, "$.store.book[?(@.price > 10)]" ) ) ; System . out. println ( "price>8的书的标题:" + JSONPath . eval ( jsonObject, "$.store.book[?(@.price > 8)]" ) ) ; System . out. println ( "price>7的书:" + JSONPath . eval ( jsonObject, "$.store.book[?(@.price > 7)]" ) ) ; System . out. println ( "price>7的书的标题:" + JSONPath . eval ( jsonObject, "$.store.book[?(@.price > 7)].title" ) ) ; System . out. println ( "书的标题为Sayings of the Century:" + JSONPath . eval ( jsonObject, "$.store.book[?(@.title='Sayings of the Century')]" ) ) ; System . out. println ( "bicycle的所有属性:" + JSONPath . eval ( jsonObject, "$.store.bicycle.*" ) ) ; System . out. println ( "bicycle:" + JSONPath . eval ( jsonObject, "$.store.bicycle" ) ) ; System . out. println ( "所有price:" + JSONPath . eval ( jsonObject, "$.store.book[*].price" ) ) ; }