JsonPath实践(五)
时间:2022-07-24
本文章向大家介绍JsonPath实践(五),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
书接上文和上上文:
今天分享的内容是JSonpath
过滤数据的API
。这部分API
分成两类:一类是运算符,例如:==
、>
、=~
这些,一类是方法或者函数,例如:in
、nin
、anyof
等等。
第一类实在没啥可分享的写法都是按照语言使用习惯,然后之前的文章也都介绍过了,下面主要分享一下方法函数的使用。
json数据
在原来的数据基础上增加了page
和pages
两个字段。
JSONObject json = JSON.parseObject("{" +
" "store": {" +
" "book": [" +
" {" +
" "category": "reference"," +
" "author": "Nigel Rees"," +
" "title": "Sayings of the Century"," +
" "page": "D"," +
" "pages": ["S","X","G"]," +
" "price": 8.95" +
" }," +
" {" +
" "category": "fiction"," +
" "author": "Evelyn Waugh"," +
" "title": "Sword of Honour"," +
" "page": "A"," +
" "pages": ["A","B"]," +
" "price": 12.99" +
" }," +
" {" +
" "category": "fiction"," +
" "author": "Herman Melville"," +
" "title": "Moby Dick"," +
" "isbn": "0-553-21311-3"," +
" "page": "B"," +
" "pages": ["E","F"]," +
" "price": 8.99" +
" }," +
" {" +
" "category": "fiction"," +
" "author": "J. R. R. Tolkien"," +
" "title": "The Lord of the Rings"," +
" "isbn": "0-395-19395-8"," +
" "page": "C"," +
" "pages": ["C","D"]," +
" "price": 22.99" +
" }" +
" ]," +
" "bicycle": {" +
" "color": "red"," +
" "price": 19.95" +
" }" +
" }," +
" "expensive": 10," +
" "ss": [32,32,4,23]" +
"}");
字段值在某个数组中
这里的数组的写法跟语言一样。
jsonpath
:$.store.book[?(@.page in ['A','C'])]
代码:
Object read = JsonPath.read(json, "$.store.book[?(@.page in ['A','C'])]");
output(JSONArray.parseArray(read.toString()));
等效写法继续省略……
控制台输出:
INFO-> 当前用户:fv,IP:10.60.192.21,工作目录:/Users/fv/Documents/workspace/fun/,系统编码格式:UTF-8,系统Mac OS X版本:10.15.6
INFO->
~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~ JSON ~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~
> {
> ① . "pages":[
> ② . . . "A",
> ② . . . "B"
> ① . ],
> ① . "author":"Evelyn Waugh",
> ① . "price":12.99,
> ① . "page":"A",
> ① . "category":"fiction",
> ① . "title":"Sword of Honour"
> }
~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~ JSON ~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~
INFO->
~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~ JSON ~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~
> {
> ① . "pages":[
> ② . . . "C",
> ② . . . "D"
> ① . ],
> ① . "author":"J. R. R. Tolkien",
> ① . "price":22.99,
> ① . "isbn":"0-395-19395-8",
> ① . "page":"C",
> ① . "category":"fiction",
> ① . "title":"The Lord of the Rings"
> }
~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~ JSON ~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~
Process finished with exit code 0
字段值不在某个数组中
这个跟上面的一模一样,只是函数变成了nin
,应该是no in
的缩写吧。
jsonpath
:$.store.book[?(@.page nin ['A','C'])]
代码:
Object read = JsonPath.read(json, "$.store.book[?(@.page nin ['A','C'])]");
output(JSONArray.parseArray(read.toString()));
等效写法继续省略……
控制台输出:
INFO-> 当前用户:fv,IP:10.60.192.21,工作目录:/Users/fv/Documents/workspace/fun/,系统编码格式:UTF-8,系统Mac OS X版本:10.15.6
INFO->
~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~ JSON ~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~
> {
> ① . "pages":[
> ② . . . "S",
> ② . . . "X",
> ② . . . "G"
> ① . ],
> ① . "author":"Nigel Rees",
> ① . "price":8.95,
> ① . "page":"D",
> ① . "category":"reference",
> ① . "title":"Sayings of the Century"
> }
~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~ JSON ~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~
INFO->
~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~ JSON ~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~
> {
> ① . "pages":[
> ② . . . "E",
> ② . . . "F"
> ① . ],
> ① . "author":"Herman Melville",
> ① . "price":8.99,
> ① . "isbn":"0-553-21311-3",
> ① . "page":"B",
> ① . "category":"fiction",
> ① . "title":"Moby Dick"
> }
~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~ JSON ~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~
Process finished with exit code 0
子集
这个校验的是数组之间的关系,value
的值必需是数组才行,如果不是,会返回空值,但不会报错。
jsonpath
:$.store.book[?(@.pages subsetof ['A','B','C'])]
代码:
Object read = JsonPath.read(json, "$.store.book[?(@.pages subsetof ['A','B','C'])]");
output(JSONArray.parseArray(read.toString()));
等效写法继续省略……
控制台输出:
INFO-> 当前用户:fv,IP:10.60.192.21,工作目录:/Users/fv/Documents/workspace/fun/,系统编码格式:UTF-8,系统Mac OS X版本:10.15.6
INFO->
~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~ JSON ~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~
> {
> ① . "pages":[
> ② . . . "A",
> ② . . . "B"
> ① . ],
> ① . "author":"Evelyn Waugh",
> ① . "price":12.99,
> ① . "page":"A",
> ① . "category":"fiction",
> ① . "title":"Sword of Honour"
> }
~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~ JSON ~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~
Process finished with exit code 0
数组之间的校验
国外的月亮也不一定是真的圆,这个据说在19年初被支持了,但是最后一个发行版本是在17年,已经三年没有发行版本了。我改天研究一下,自己弄个最新的版本版本吧。
属性值数量验证
size
可以验证数组长度也可以验证字符串长度。
jsonpath
:$.store.book[?(@.pages size 3)]
字符串长度:
jsonpath
:$.store.book[?(@.author size 16)]
代码:
Object read = JsonPath.read(json, "$.store.book[?(@.pages size 3)]");
output(JSONArray.parseArray(read.toString()));
Object read = JsonPath.read(json, "$.store.book[?(@.author size 16)]");
output(JSONArray.parseArray(read.toString()));
等效写法继续省略……
控制台输出:
INFO-> 当前用户:fv,IP:10.60.192.21,工作目录:/Users/fv/Documents/workspace/fun/,系统编码格式:UTF-8,系统Mac OS X版本:10.15.6
INFO->
~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~ JSON ~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~
> {
> ① . "pages":[
> ② . . . "S",
> ② . . . "X",
> ② . . . "G"
> ① . ],
> ① . "author":"Nigel Rees",
> ① . "price":8.95,
> ① . "page":"D",
> ① . "category":"reference",
> ① . "title":"Sayings of the Century"
> }
~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~ JSON ~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~
Process finished with exit code 0
INFO-> 当前用户:fv,IP:10.60.192.21,工作目录:/Users/fv/Documents/workspace/fun/,系统编码格式:UTF-8,系统Mac OS X版本:10.15.6
INFO->
~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~ JSON ~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~
> {
> ① . "pages":[
> ② . . . "C",
> ② . . . "D"
> ① . ],
> ① . "author":"J. R. R. Tolkien",
> ① . "price":22.99,
> ① . "isbn":"0-395-19395-8",
> ① . "page":"C",
> ① . "category":"fiction",
> ① . "title":"The Lord of the Rings"
> }
~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~ JSON ~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~
Process finished with exit code 0
为空判断
事实证明这也是一个坑,不过可以使用size 0
这个API
替换一下。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Istio可观测性
- 大点干!早点散----------使用Haproxy搭建web群集
- 嵌入式系统FreeRTOS — 互斥信号量
- 面试题系列第6篇:JVM字符串常量池及String的intern方法详解?
- 机器学习(一)——K-近邻(KNN)算法
- 机器学习(二)——K-均值聚类(K-means)算法
- windows下matplotlib的安装
- Python中常见的数据类型总结
- stm32中阻塞模式和非阻塞模式 in blocking mode 与 in non-blocking mode区别
- 机器学习(四)—决策树
- 机器学习(五)—朴素贝叶斯
- C语言面试题——位域及大小端模式的理解
- stm32添加串口调试
- STM32单片机极简方法 使用宏定义 代替复杂的重定向printf()函数,实现串口打印。(HAL库例程)
- 机器学习(六)— logistic回归