python-json校验-jsonpath解析

目录
  • 背景
  • 表示法
  • jsonpath的语法
  • 示例
  • 实战

背景

在进行接口自动化测试的时候,对响应结果进行校验,基本上都是对json数据的校验,响应内容十分复杂,当然验证也是一个很庞大的工程 ,不过都是可以通过jsonpath 解决。

JSONPath 提供了强大的 JSON 解析功能,可以更便捷灵活的用来获取对应的 JSON 内容。

表示法

JSONPath 有两种表示方式, 可以使用点表示法,也可以使用括号表示法

  • 点表示法 例子:$.store.book[0].title
  • 括号表示法 例子:$['store']['book'][0]['title']

官方帮助文档

jsonpath的语法

语法 描述
$ 根对象/元素
@ 当前对象/元素
. 或者 [] 子运算符,匹配下级元素
.. 递归下降,递归方式匹配所有子元素
* 通配符。所有对象/元素,无论其名称
[] 下标运算符,jsonpath 从0开始
[,] 连接的操作符,多个结果拼接成列表返回
[开始:结束:步骤] 从 ES4 借来的数组切片运算符。
?() 应用过滤器(脚本)表达式。
() 脚本表达式,使用底层脚本引擎。

示例

{ "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
    }
  }
}
jsonpath 结果 备注
$.store.book[*].author 所有书籍的作者
$..author 所有的作者
$.store.* 商店下的所有元素/对象,包括书籍和自行车
$.store..price 商店里所有元素/对象的价格
$..book[2] 下标从0开始,第3本书
$..book[(@.length-1)] 按顺序排列最后一本书 用到了()和@两个语法
$..book[-1:] 按顺序排列最后一本书 用到了[]数组下标切片
$..book[0,1] 第1本书和第2本书,前两本书
$..book[:2] 第1本书和第2本书,前两本书 $…book[0:2] ,从0开始,0 1,前两本书
$..book[?(@.isbn)] 有isbn字段的所有书籍
$..book[?(@.price<10)] 所有价格小于10的书籍
$..* json结构的所有元素

实战

安装jsonpath

pip3 install jsonpath

以网上一个开源的获得天气的API为例子:

def test_get_json(self):
        r = requests.get("http://t.weather.sojson.com/api/weather/city/101191102")
        print(r.text)
        r_json = r.json()
        # 用点方法来获得notice的内容
        yesterday = jsonpath(r_json, "$.data.yesterday.notice")
        print(yesterday)
        # 获得aqi=15 的forecast元素
        aqi = jsonpath(r_json, "$..forecast[?(@.aqi==15)]")
        print(aqi)

当不知道有jsonpath这个神器的时候,我是通过遍历一个个元素,然后再去比对具体的字段信息,比如下方:获得duration 超过7000 的api信息

{
	"apis": [{
		"path": "/path",
		"duration": 7890
	}, {
		"path": "/path",
		"duration": 6890
	}, {
		"path": "/path",
		"duration": 5890
	}]
}

通过遍历的方式获得:

apis = '{"apis":[{"path":"/path","duration":7890},{"path":"/path","duration":6890},{"path":"/path","duration":5890}]}'
print(json.loads(apis))
apis_json = json.loads(apis)
# 一个个遍历
api_duration = []
for api in apis_json["apis"]:
   duration = api["duration"]
   if int(duration) > 7000:
       print(str(duration))
       api_duration.append(api["path"])
print(api_duration)

通过jsonpath获得

#jsonpath 更简单
api_duration2 = jsonpath(apis_json, "$.apis[?(@.duration>7000)].path")
print(api_duration2)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • python的json中方法及jsonpath模块用法分析

    本文实例讲述了python的json中方法及jsonpath模块用法.分享给大家供大家参考,具体如下: 什么是json JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写.同时也方便了机器进行解析和生成.适用于进行数据交互的场景,比如网站前台与后台之间的数据交互. json模块中方法的学习 其中类文件对象的理解: 具有read()或者write()方法的对象就是类文件对象,比如f = open("a.txt",

  • Python使用jsonpath-rw模块处理Json对象操作示例

    本文实例讲述了Python使用jsonpath-rw模块处理Json对象操作.分享给大家供大家参考,具体如下: 这两天在写一个爬虫,需要从网站返回的json数据提取一些有用的数据. 向url发起请求,返回的是response,在python3中,response.content是二进制bytes类型的,需要用decode()转成unicode的str类型 #如果用的requests发的请求 import json response = requests.get(url,headers=self.

  • 解析python中的jsonpath 提取器

    目录 为什么要用jsonpath jsonpath的语法 jsonpath 解析 使用示例 为什么要用jsonpath 就跟为什么要用xpath一样,jsonpath的设计灵感来源于xpath.一个强大的json数据提取工具.让用户不用编写脚本就可以提取到相应的json数据. jsonpath的语法 jsonpath可以什么这两种模式来检索数据:以点为分隔$.store.book[0].title$.store.book[0,1] #可以取到第一个和第二个book值$.store.book[*]

  • Python json解析库jsonpath原理及使用示例

    jsonpath jsonpath 用于多层嵌套 json格式的 解析. pip install jsonpath JsonPath 描述 $ 根节点 @ 现行节点 .or[] 取子节点 n/a 取父节点,jsonpath为支持 .. 就是不管位置,选择所有复合条件的条件 * 匹配所有元素节点 n/a 根据属性访问,json不支持,因为json是个key-value递归结构,不需要数属性访问 [] 迭代器标示(可以在里边做简单的迭代操作,如数组下标,根据内容选值等) [,] 支持迭代器中做多选

  • python-json校验-jsonpath解析

    目录 背景 表示法 jsonpath的语法 示例 实战 背景 在进行接口自动化测试的时候,对响应结果进行校验,基本上都是对json数据的校验,响应内容十分复杂,当然验证也是一个很庞大的工程 ,不过都是可以通过jsonpath 解决. JSONPath 提供了强大的 JSON 解析功能,可以更便捷灵活的用来获取对应的 JSON 内容. 表示法 JSONPath 有两种表示方式, 可以使用点表示法,也可以使用括号表示法 点表示法 例子:$.store.book[0].title 括号表示法 例子:$

  • Python 解析库json及jsonpath pickle的实现

    1. 数据抽取的概念 2. 数据的分类 3. JSON数据概述及解析 3.1 JSON数据格式 3.2 解析库json json模块是Python内置标准库,主要可以完成两个功能:序列化和反序列化.JSON对象和Python对象映射图如下: 3.2.1 json序列化 对象(字典/列表) 通过 json.dump()/json.dumps() ==> json字符串.示例代码如下: import json class Phone(object): def __init__(self, name,

  • Python json模块与jsonpath模块区别详解

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写.同时也方便了机器进行解析和生成.适用于进行数据交互的场景,比如网站前台与后台之间的数据交互. JSON和XML相比较可谓不相上下. Python 3.X中自带了JSON模块,直接import json就可以使用了. 官方文档:http://docs.python.org/library/json.html Json在线解析网站:http://www.json.cn/ JS

  • Java使用JSONPath解析JSON完整内容详解

    JsonPath是一种简单的方法来提取给定JSON文档的部分内容. JsonPath有许多编程语言,如Javascript,Python和PHP,Java. JsonPath提供的json解析非常强大,它提供了类似正则表达式的语法,基本上可以满足所有你想要获得的json内容. maven中添加jar包 JsonPath可在Central Maven存储库中找到. Maven用户将其添加到您的POM. com.jayway.jsonpath json-path 2.2.0 操作符 操作 说明 $

  • 详解Python使用simplejson模块解析JSON的方法

    1,Json模块介绍 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集.JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)

  • Python发送http请求解析返回json的实例

    python发起http请求,并解析返回的json字符串的小demo,方便以后用到. #! /usr/bin/env python # -*- coding:gbk -*- import os import sys import json import urllib import urllib2 if __name__ == "__main__": query_file = sys.argv[1] query_index = 0 with open(query_file, 'r') a

  • Python解析json代码实例解析

    这篇文章主要介绍了Python解析json代码实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 什么是json格式: JSON(JavaScript Object Notation):一种轻量级数据交换格式,相对于XML而言更简单,也易于阅读和编写,机器也方便解析和生成,Json是JavaScript中的一个子集. import json data = { "statusCode": 200, "data":

  • Python抓包并解析json爬虫的完整实例代码

    Python抓包并解析json爬虫 在使用Python爬虫的时候,通过抓包url,打开url可能会遇见以下类似网址,打开后会出现类似这样的界面,无法继续进行爬虫: 例如: 需要爬取网页中第二页的数据时,点击F12➡网络(Network)➡XHR,最好点击清除键,如下图: 通过点击"第二页",会出现一个POST请求(有时会是GET请求),点击POST请求的url,(这里网址以POST请求为例), 如图: 然后复制参数代码 代码展示: import requests import json

随机推荐