JsonPath使用和示例

news2024/9/20 18:11:55

JsonPath使用和示例

  • 1 简介
  • 2 官方实例
  • 3 JsonPath与XPath语法对比
  • 4 实例说明JsonPath与XPath语法
  • 5 Python中JsonPath模块
  • 6 Python中JsonPath使用
  • 7 结合接口测试的实例

1 简介

  • 官网:https://goessner.net/articles/JsonPath/;
  • JsonPath 是一种简单的方法来提取给定JSON文档的部分内容;
  • JsonPath 支持多种编程语言,如JavascriptJavaPythonPHP

2 官方实例

  • 下边是官方给出的一个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
    }
  }
}

3 JsonPath与XPath语法对比

XpathJsonPath描述
/$根节点
.@现行节点
/. 或 []取子节点
取父节点,Jsonpath未支持
@根据属性访问,Jsonpath未支持,因为Json是个Key-value递归结构,不支持属性访问
**匹配所有元素节点
[][]迭代器标示(可以在里面做简单的迭代操作,如数组下标,根据内容选值等)
竖线[,]支持迭代器中做多选。连接操作符在XPath 结果合并其它结点集合。Jsonpath允许name或者数组索引。
[]?()支持过滤操作
[start: end: step]数组分割操作从ES4借鉴
()脚本表达式,使用底层脚本引擎。支持表达式计算
()Xpath分组;JsonPath不支持

4 实例说明JsonPath与XPath语法

  • 通过步骤2中的官方实例,简单看下JsonPathXPath语法的区别:
XPathJsonPath描述
/store/book/author$.store.book[*].author获取店内所有书籍的作者
//author$..author获取所有作者
/store/*$.store.*获取store的所有元素。所有的bookbicycle
/store//price$.store..price获取store里面所有东西的价格
//book[3]$..book[2]获取第三本书的所有信息
//book[last()]$..book[(@.length-1)] 或$..book[-1:]获取最后一本书的所有信息
//book[position()<3]$..book[0,1] 或 $..book[:2]获取前面两本书的所有信息
//book[isbn]$..book[?(@.isbn)] 过滤出所有的包含isbn的书信息
//book[price<10]$..book[?(@.price<10)] 过滤出价格低于10的书
//* $..*获取所有元素

5 Python中JsonPath模块

  • 官网:https://pypi.org/project/jsonpath/;
  • 下载安装:
pip install jsonpath

在这里插入图片描述

6 Python中JsonPath使用

# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/7/31 
# 文件名称:json_path.py
# 作用:jsonpath
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson

import jsonpath as jp

data = { "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
    }
  }
}
# 获取店内所有书籍的作者
author = jp.jsonpath(data, '$.store.book[*].author')
print(author)

# 输出
['Nigel Rees', 'Evelyn Waugh', 'Herman Melville', 'J. R. R. Tolkien']
# 获取所有作者
all_aythor = jp.jsonpath(data, '$..author')
print(all_aythor)

# 输出
['Nigel Rees', 'Evelyn Waugh', 'Herman Melville', 'J. R. R. Tolkien']
# 获取store的所有元素
book_bicycle = jp.jsonpath(data, '$.store.*')
print(book_bicycle)

# 输出
[[{'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}], {'color': 'red', 'price': 19.95}]
# 获取store里面所有东西的价格
price = jp.jsonpath(data, "$.store..price")
print(price)

# 输出
[8.95, 12.99, 8.99, 22.99, 19.95]
# 获取最后一本书的所有信息
last_book = jp.jsonpath(data, '$.store..book[-1:]')
print(last_book)

# 输出:
[{'category': 'fiction', 'author': 'J. R. R. Tolkien', 'title': 'The Lord of the Rings', 'isbn': '0-395-19395-8', 'price': 22.99}]
# 过滤出价格低于10的书
p = jp.jsonpath(data, '$.store..book[?(@.price<10)]')
print(p)

# 输出:
[{'category': 'reference', 'author': 'Nigel Rees', 'title': 'Sayings of the Century', 'price': 8.95}, {'category': 'fiction', 'author': 'Herman Melville', 'title': 'Moby Dick', 'isbn': '0-553-21311-3', 'price': 8.99}]

7 结合接口测试的实例

  • 接口数据,参照:
    搭建禅道环境作为练习UI和接口自动化测试对象,来搭建接口测试的环境,此处略;
  • 选择两个接口:用户登陆和用户查询:
# 登陆接口
http://127.0.0.1/zentao/api.php/v1/tokens
data = {"account": "admin", "password": "123456"}
# 获取我的个人信息
http://127.0.0.1/zentao/api.php/v1/user
  • 实例:
# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/7/31 
# 文件名称:json_path.py
# 作用:jsonpath
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson

import jsonpath as jp
import requests
import json

base_url = "http://127.0.0.1/zentao/api.php/v1"
token_url = base_url + "/tokens"
info_rurl = base_url + "/user"

header = {"Content-Type": "application/json"}
data = {"account": "admin", "password": "ZenTao123456"}

r_data = json.dumps(data)
r = requests.post(url=token_url, data=r_data, headers=header)

r_token = jp.jsonpath(r.json(), '$..token')
print(r_token)

data1 = {"token": r_token[0]}
headers = dict(header, **data1)
r1 = requests.get(url=info_rurl, headers=headers)
print(r1.text)
  • 输出:
['14333e8b34595c5d22794e14c401a125']
{"profile":{"id":1,"company":0,"type":"inside","dept":0,"account":"admin","role":
{"code":"","name":""},
"realname":"admin","pinyin":"","nickname":"","commiter":"","avatar":null,"birthday":null,"gender":"f","email":"","skype":"","qq":"","mobile":"","phone":"","weixin":"","dingding":"","slack":"","whatsapp":"","address":"","zipcode":"","nature":null,"analysis":null,"strategy":null,"join":null,"visits":5,"visions":",rnd,lite,","ip":"127.0.0.1","last":"2023-07-31T06:14:45Z","fails":0,"locked":null,"feedback":"0","ranzhi":"","ldap":"","score":0,"scoreLevel":0,"resetToken":"","deleted":"0","clientStatus":"offline","clientLang":"zh-cn","admin":true,"superReviewer":false,"view":
{"account":"admin","programs":"","products":"","projects":"","sprints":""}}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/815484.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

做了5年软件测试决定离职,跳槽历经40场面试, 面的基本都是大厂

前言 沉寂了好一段日子&#xff0c;连我们公司自己人都问我为什么最近都不写文章了。 那么当看到本篇的标题的时候&#xff0c;大家应该可以猜到这是为什么了。 我最终还是决定要离开服务了 5 年多的公司。 而这次跳槽历经 3 个月&#xff0c;前后聊了 10 家公司&#xff0c;进…

问题:idea启动项目错误提示【command line is too long. shorten command line】

问题&#xff1a;idea启动项目错误提示【command line is too long. shorten command line】 参考博客 问题描述 启动参数过长&#xff0c;启动项目&#xff0c;错误提示 原因分析 出现此问题的直接原因是&#xff1a;IDEA集成开发环境运行你的“源码”的时候&#xff08…

Spring学习笔记之入门程序

文章目录 关于下载介绍jar包第一个入门程序关于入门程序的小细节启用Log4j2 关于下载 这是一个悲惨而又戏剧性的故事 其实是不用下的&#xff0c;spring的jar包是归meaven管的&#xff0c;不用特地的去spring官网再去什么github上下载&#xff0c;再去看什么乱七八糟的目录&a…

IDEA的基础使用——【初识IDEA】

IDEA的基础使用——【初识IDEA】 文章目录 IDEA简介前言官网 IDEA的下载与安装选择下载路径勾选自己需要的其余按默认选项进行即可 目录简介安装目录简介 运行Hello WorldIDEA快捷键常用模板模板一&#xff1a;psvm&#xff08;main&#xff09;模板二&#xff1a;模板三&#…

adb常用命令使用

1.查看当前运行的包名和Activity adb shell dumpsys window | findstr mCurrentFocus 2.卸载app adb uninstall io.appium.settings adb uninstall io.appium.unlock adb uninstall io.appium.android.ime

Ubutun安装中文语言和搜狗输入法

Unbuntu版本是18.04的。要安装中文语言和搜狗输入法。 参考官方说明 Install languages 安装网址&#xff1a;搜狗输入linux安装网址 安装搜狗输入法&#xff1a;看搜狗输入法的指南是最权威的&#xff1a; 搜狗输入法安装指南linux 拖拽语言&#xff08;最开始中文是在下面的…

软件外包开发的后台开发语言

在软件外包开发中&#xff0c;后台语言的选择通常取决于项目需求、客户偏好、团队技能和开发效率。今天和大家分享一些常用的后台语言及选择它们的原因&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。…

软件测试质量度量之 “三级指标体系”

管理学大师彼得 - 德鲁克曾说过&#xff1a;无数据不管理。 数字是人们快速认知事物的一种有效方式。无论在生活还是工作&#xff0c;对事还是对人都息息相关。碰上难以的用数字描述事物或现象肯定是没有找对适用的指标和度量方式。尤其对于质量工程方面的工作&#xff0c;定量…

从小白到大神之路之学习运维第70天-------Docker容器引擎基础

第四阶段提升 时 间&#xff1a;2023年7月31日 参加人&#xff1a;全班人员 内 容&#xff1a; Docker容器引擎基础 目录 一、Docker概述 &#xff08;一&#xff09;容器背景&#xff1a; &#xff08;二&#xff09;云计算模式&#xff1a; &#xff08;三&#x…

Python+OpenCV实现自动扫雷,挑战扫雷世界记录!

目录 准备 - 扫雷软件 实现思路 - 01 窗体截取 - 02 雷块分割 - 03 雷块识别 - 04 扫雷算法实现 福利&#xff1a;文末有Python全套资料哦 我们一起来玩扫雷吧。用PythonOpenCV实现了自动扫雷&#xff0c;突破世界记录&#xff0c;我们先来看一下效果吧。 中级 - 0.74秒 …

大数据技术之Clickhouse---入门篇---安装

星光下的赶路人star的个人主页 努力到无能为力&#xff0c;拼搏到感动自己 文章目录 1、ClickHouse的安装1.1 准备工作1.1.1 确定防火墙处于关闭状态1.1.2 CentOS取消打开文件数限制1.1.3 安装依赖&#xff08;所有节点都进行依赖安装&#xff09;1.1.4 CentOS取消SELINUX 1.2 …

OPC DA 客户端与服务器的那点事

C#开发OPC客户端&#xff0c;使用OPCDAAuto.dll。在开发过程中偶遇小坎坷&#xff0c;主要记录一下问题解决办法。 1、建立客户端&#xff0c;参考链接。建立WinFrom工程&#xff0c;将博客中代码全部复制即可运行&#xff1a; https://www.cnblogs.com/kjgagaga/p/17011730.…

Linux 查看服务器内存、CPU、网络等占用情况的命令

1、查看物理CPU个数&#xff1a;cat cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l 2、查看服务器CPU内核个数&#xff1a;cat 每个物理CPU中core的个数&#xff08;即核数&#xff09; cat /proc/cpuinfo | grep "cpu cores" | u…

【数据库】事务隔离级别

事务特征ACID 原子性&#xff08;Atomicity&#xff09;&#xff1a;事务中的所有操作要么全部执行成功&#xff0c;要么全部失败回滚&#xff0c;没有中间状态。它确保了数据的完整性。一致性&#xff08;Consistency&#xff09;&#xff1a;事务执行后&#xff0c;数据库从…

02_modbus从站从开始初始化到接收一帧数据的流程

0. 协议栈接收状态的变化图 1.协议栈的初始化和使能 void eMBRTUStart( void ) {ENTER_CRITICAL_SECTION( );/* Initially the receiver is in the state STATE_RX_INIT. we start* the timer and if no character is received within t3.5 we change* to STATE_RX_IDLE. This…

网络请求fetch

fetch()是 XMLHttpRequest 的升级版&#xff0c;用于在 JavaScript 脚本里面发出 HTTP 请求。浏览器原生提供这个对象 fetch()的功能与 XMLHttpRequest 基本相同&#xff0c;但有三个主要的差异。 与 Ajax 类似&#xff0c;Fetch 也是前后端通信的一种方式。Fetch 要比 Ajax …

DBeaver远程连接使用DM数据库

DBeaver 工具版本使用 21.3.2 测试可用 数据库连接驱动包 需要提前下载DM数据库连接驱动DmJdbcDriver18.jar 驱动下载地址&#xff1a;https://eco.dameng.com/document/dm/zh-cn/app-dev/java-MyBatis-Plus-frame.html 配置数据库驱动 数据库 ---- 驱动管理 新建驱动 驱动…

Web3Space空间梅州站盛大开业:探索web3.0新时代的无限可能!

7月28日&#xff0c;Web3Space空间梅州站在广东省梅州市区盛大开业。 在互联网3.0时代&#xff0c;社会的生产关系与生产力都将发生变革&#xff0c;企业与个体都将拥抱数字化时代。可以预见未来企业的组织形态将会由过往的庞然大物”转向无数个小而美的“超级个体"。而We…

六.安装harbor

1、下载 harbor-offline-installer-v1.9.3 链接&#xff1a;https://pan.baidu.com/s/1dTCy2KPqRhYKxTyE7vlrPg 提取码&#xff1a;6666 需要安装docker-compose 2、修改配置 vim harbor.yml 修改hostname和port 3、安装 [rootlocalhost harbor]# ./prepare prepare b…

语音转录成文本:AI Transcription for mac

AI Transcription是一种人工智能技术&#xff0c;它可以将音频和视频文件转换成文本格式。这种技术可以帮助用户快速地将大量的音频和视频内容转换成文本格式&#xff0c;方便用户进行文本分析、搜索和编辑等操作。 以下是AI Transcription的几个特点&#xff1a; 高效性。AI …