Jayway JsonPath---引擎学习

一、简要概述

  1. JsonPath用于读取JSON文档,使用起来很方便。通过前段时间项目开发过程中,针对于特定的场景来使用这款解析神器。给我的直观感受就是:使用JsonPath来检索JSON数据中指定的字段值效率还是很快的。

二、JsonPath知识学习

  1. 运算器语法如下所示
运算符描述
$要查询的根元素。这将启动所有路径表达式。
@过滤谓词正在处理的当前节点。
深层扫描。可在任何需要名称的地方使用。
.<名字>点出当前节点的下级子节点
[’<名字>’ (, ‘<名字>’)]要查询的根元素。这将启动所有路径表达式。
[<数字> (, <数字>)]要查询的根元素。这将启动所有路径表达式。
[start:end]数组切片运算符
[?(<表达式>)]过滤表达式。表达式必须计算为布尔值。
  1. 函数语法如下所示
函数描述输出
min()提供数字数组的最小值Double
max()提供数字数组的最大值Double
avg()提供数字数组的平均值Double
stddev()提供数字数组的标准偏差值Double
length()提供数组的长度Integer
sum()提供数字数组的总和Double
keys()提供属性键(终端波浪号的替代方法~)Set
  1. 过滤运算符语法如下所示
运算符描述
==左等于右(请注意1不等于“ 1”)
!=左不等于右
<左小于右
<=左小于或等于右
>左大于右
> =左大于或等于右
=〜left匹配正则表达式[?(@。name =〜/foo.*?/i)]
in左存在于右[?(@.size in [‘S’, ‘M’])]
nin左不存在于右
subsetof左是右的子集[?(@.sizes subsetof [‘S’, ‘M’, ‘L’])]
anyof左与右有一个相交[?(@.sizes anyof [‘M’, ‘L’])]
noneof左与右没有一个相交[?(@.sizes noneof [‘M’, ‘L’])]
size左(数组或字符串)的大小应与右匹配
empty左边(数组或字符串)应为空
  1. JSON数据样例
{ 
    “ store”:{ 
        “ book”:[ 
            { 
                “ category”:“参考” ,
                “ author”:“ Nigel Rees” ,
                “ title”:“世纪风云” ,
                “ price”:8.95 
            } ,
            { 
                “ category “:‘小说界’ ,
                ‘作家’:‘伊夫林沃’ ,
                ‘称号’:‘荣誉之剑’ ,
                ‘价格’:12。99 
            } ,
            { 
                “ category”:“小说” ,
                “ author”:“ Herman Melville” ,
                “ title”:“ Moby Dick” ,
                “ isbn”:“ 0-553-21311-3” ,
                “ price”:8.99 
            } ,
            { 
                “ category”:“小说” ,
                “ author “:” JRR Tolkien“ ,
                ” title“:”指环王“ ,
                ” isbn“:” 0-395-19395-8“ ,
                ” price“:22.99 
            } 
        ] ,
        ”自行车” :{ 
            “颜色”:“红色” ,
            “价格”:19.95 
        } 
    } ,
    “昂贵”:10 
}
JsonPath表达式结果
$ .store.book [*].author所有书籍的作者
$ …author所有作者
$ .store。*所有东西,包括书籍和自行车
$ .store…price一切的价格
$ … book [2]第三本书
$ … book [-2]倒数第二本书
$ … book [0,1]前两本书
$ … book [:2]从索引0(含)到索引2(不含)的所有图书
$ … book [1:2]从索引1(含)到索引2(不含)的所有图书
$ … book [-2:]最后两本书
$ … book [2:]第二本书从尾
$ … book [?(@。isbn)]所有带有ISBN编号的图书
$ .store.book [?(@。price <10)]商店中所有书籍的价格均低于10
$ … book [?(@。price <= $ [‘expensive’])]商店中所有非“昂贵”的图书
$ … book [?(@。author =〜/.*REES/i)]所有与正则表达式匹配的书籍(忽略大小写)
$ … *把所有东西都给我
$ … book.length()书数

三、JsonPath入门

  1. 强烈推荐学习者可以在学习JsonPath知识的同时,利用在线JSONPath测试进行实操运用。
  2. 我在这里说一下idea中如何使用JsonPath引擎来进行解析JSON数据。
    (1)pom文件引入JsonPath依赖库
<dependency>
    <groupId>com.jayway.jsonpath</groupId>
    <artifactId>json-path</artifactId>
    <version>2.5.0</version>
</dependency>

(2)代码中对json字符串进行解析

String json = "...";
List<String> authors = JsonPath.read(json, "$.store.book[*].author");

(3)回写上下文(有需要的朋友可以参考)

if ("Y".equals(expr_write_back_ctx)) {
    context.put(expr_code, result);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值