我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python-json校验-jsonpath解析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python-json校验-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)

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python-json校验-jsonpath解析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python-json校验-jsonpath解析

这篇文章主要介绍了python-json校验-jsonpath,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-11-21

golang整合antlr语法校验解析

Antlr是一个语法分析器,本身是用java实现的,然是Runtime的库也支持Golang、Java、Python等,本文给大家讲解使用golang整合antlr进行语法解析,感兴趣的朋友一起看看吧
2023-02-28

JSON解析-python实现

本文从以下几个方面进行讨论: 1. JSON的基本概念 2. python解析JSON 3. 参考1. JSON基本概念1.1 JSON概念及特点JSON 指的是 JavaScript 对象表示法(JavaScript Object Not
2023-01-31

python解析与组装json

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用
2023-01-31

JSONLINT:python的json数据验证库实例解析

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写。 JSON 函数 使用 JSON 函数需要导入 json 库:import json。函数描述json.dumps将 Pytho
2022-06-04

Python对比校验神器deepdiff库使用详解

deepdiff模块常用来校验两个对象是否一致,包含3个常用类,DeepDiff,DeepSearch和DeepHash,其中DeepDiff最常用,可以对字典,可迭代对象,字符串等进行对比,使用递归地查找所有差异,本文给大家讲解Python对比校验神器deepdiff库,感兴趣的朋友一起看看吧
2023-05-16

怎么使用Python解析JSON

这篇文章主要介绍“怎么使用Python解析JSON”,在日常操作中,相信很多人在怎么使用Python解析JSON问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Python解析JSON”的疑惑有所帮助!
2023-06-22

spring自定义校验注解ConstraintValidator的示例分析

这篇文章主要介绍spring自定义校验注解ConstraintValidator的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、前言系统执行业务逻辑之前,会对输入数据进行校验,检测数据是否有效合法的。所以
2023-06-20

深入理解Python对Json的解析

Json简介JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。
2022-06-04

python怎么读取json并解析

在Python中,可以使用json模块来读取和解析JSON数据。下面是一个简单的例子:pythonimport json# 读取JSON文件with open(data.json, r) as file: data = json.lo
2023-10-18

python怎么获取json并解析

要在Python中获取和解析JSON数据,你可以使用`json`模块。下面是一些示例代码,展示了如何获取JSON数据并解析它:import jsonimport requests# 获取JSON数据response = request
2023-10-27

Python简单解析和封装json

python list对象转换成json格式#!/usr/bin/env pythonimport jsondata = [{'type':'trigger','addr':'0x1234','data':'0x1234'}]print "
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录