其他分享
首页 > 其他分享> > Jsonpath 常用解析规则总结

Jsonpath 常用解析规则总结

作者:互联网

前言:编写UI自动化测试脚本的时候常常需要通过Xpath去定位元素的位置或者JsonPath解析response的结果,这里介绍一下常用的通过Xpath的方式抓去元素的方式以及jsonpath的常用解析规则。

JsonPath可在Central Maven存储库中找到。 Maven用户将其添加到您的POM:


  1. <dependency>

  2.     <groupId>com.jayway.jsonpath</groupId>

  3.     <artifactId>json-path</artifactId>

  4.     <version>2.2.0</version>

  5. </dependency>

JsonPath表达式总是以与XPath表达式结合使用XML文档相同的方式引用JSON结构。

JsonPath中的“根成员对象”始终称为$,无论是对象还是数组。

JsonPath表达式可以使用点表示法

$.store.book [0].title

或括号表示法

$['store']['book'][0]['title']

操作符

OperatorDescription
$查询根结点,启动所有路径的表达式。
@当前节点可以通过该符号进行过滤。
*通配符,必要时可用在任何地方的名称或者数字。
..深层扫描,必要时可在任何地方使用名称。
.<name>点,表示子节点
['<name>' (, '<name>')]括号表示子项
[<number> (, <number>)]数组索引或者索引
[start:end]数组切片操作
[?(<expression>)]过滤表达式,表达式的值为一个布尔值

函数

函数可以在路径的尾部使用,函数的输出是路径表达式的输出,该函数的输出是由函数本身决定的。

函数

描述输出
min()提供数字数组的最小值Double
max()提供数字数组的最大值Double
avg()提供数字数组的平均值Double
stddev()提供数字数组的标准偏差值Double
length()提供数组的长度Integer

过滤器运算符

过滤器是用于筛选数组的表达式。一个典型的过滤器是[?(@.age>18)],其中@表示正在处理的当前项目。可以使用逻辑运算符&&和||创建更复杂的过滤器。字符串文字必须用单引号或者双引号括起来eg:[?(@.color=='blue')] or [?(@.color == "Blue")]

操作符描述
==left等于right(注意1不等于'1')
!=不等于
<小于
<=小于等于
>大于
>=大于等于
=~匹配正则表达式[?(@.name =~ /foo.*?/i)]
in左边存在于右边 [?(@.size in ['S', 'M'])]
nin左边不存在于右边
size(数组或字符串)长度
empty(数组或字符串)为空

后面举例Json解析和HTML解析。

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
            },
            {
                "category": "fiction",
                "author": "Herman Melville",
                "title": "Moby Dick",
                "isbn": "0-553-21311-3",
                "price": 8.99
            },
            {
                "category": "fiction",
                "author": "J. R. R. Tolkien",
                "title": "The Lord of the Rings",
                "isbn": "0-395-19395-8",
                "price": 22.99
            }
        ],
        "bicycle": {
            "color": "red",
            "price": 19.95
        }
    },
    "expensive": 10
}
JsonPath 点击测试链接结果
$.store.book[*].author获取json中store下book下的所有author值
$..author获取所有json中所有author的值
$.store.*所有的东西,书籍和自行车
$.store..price获取json中store下所有price的值
$..book[2]获取json中book数组的第3个值
$..book[-2]倒数的第二本书
$..book[0,1]前两本书
$..book[:2]从索引0(包括)到索引2(排除)的所有图书
$..book[1:2]从索引1(包括)到索引2(排除)的所有图书
$..book[-2:]获取json中book数组的最后两个值
$..book[2:]获取json中book数组的第3个到最后一个的区间值
$..book[?(@.isbn)]获取json中book数组中包含isbn的所有值
$.store.book[?(@.price < 10)]获取json中book数组中price<10的所有值
$..book[?(@.price <= $['expensive'])]获取json中book数组中price<=expensive的所有值
$..book[?(@.author =~ /.*REES/i)]获取json中book数组中的作者以REES结尾的所有值(REES不区分大小写)
$..*逐层列出json中的所有值,层级由外到内
$..book.length()获取json中book数组的长度

HTML

现在很多UI元素属性因为框架原因很多属性都是框架随机生成的UUID,所以自动化在页面抓取元素的时候不能准确的定位到指定的位置,对于这种情况,我们可以通过下面的表达式进行模糊匹配(这里主要介绍WebdriverIO)

<ul id="menu">
    <li><a class = "title-3948uuio" href="/">Home</a></li>
    <li><a class = "u23242-title" href="/">Developer Guide</a></li>
    <li><a class = "API" href="/">API</a></li>
    >#shadowroot 
     <li><a href="/">Contribute</a></li>
    
</ul>

标签:总结,..,author,price,json,Jsonpath,数组,解析,book
来源: https://blog.csdn.net/bai___DDD/article/details/121078655