JSONPath库:使用类似Xpath的语法解析JSON数据

R语言使用mlr包创建回归任务、指定回归学习函数为KNN回归模型、网格搜索、交叉验证调节KNN模型的超参数K获取模型最佳的K值、可视化KNN模型的不同K值和MSE指标之间关系图 阅读详情

简介

JSONPath是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python, PHP 和 Java。JsonPath 对于 JSON 来说,相当于 XPath 对于 XML。

官方文档:http://goessner.net/articles/JsonPath
安装方法:pip install jsonpath

JsonPath与Xpath语法对比

Json结构清晰,可读性高,复杂度低,非常容易匹配,下表中对应了XPath的用法。

XPathJSONPath描述
/$根节点
.@现行节点v
/.or[]取子节点
…n/a取父节点,Jsonpath未支持
//…就是不管位置,选择所有符合条件的条件
**匹配所有元素节点
@n/a根据属性访问,Json不支持,因为Json是个Key-value递归结构,不需要。
[][]迭代器标示(可以在里边做简单的迭代操作,如数组下标,根据内容选值等)
[,]支持迭代器中做多选。
[]?()支持过滤操作.
n/a()支持表达式计算
()n/a分组,JsonPath不支持

JSONPath表达式支持点号标记法和括号标记法。$.store.book[0].title等价于$['store']['book'][0]['title']

使用方法

JSONPath的API非常简单,最常用的就是jsonpath函数。

jsonpath函数的原型如下:jsonpath(obj, expr, result_type='VALUE', debug=0, use_eval=True)

参数如下:

  • obj:类型为字典,即JSON数据。必备参数。
  • expr:类型为字符串,即JSONPath表达式。必备参数。
  • result_type:类型为字符串,即返回值类型。可选参数。
    • 默认值为'VALUE',返回匹配的值。
    • IPATH'',以列表形式返回匹配值的JSONPath路径索引。
    • 其他值,返回匹配值的JSONPath表达式字符串。

返回值:类型为列表或False,无匹配值时返回值为False。

案例:JSONPath返回值类型

import jsonpath
from pprint import pprint

jsonobj ={ "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
    }
  }
}

# 返回值
all_prices = jsonpath.jsonpath(jsonobj,'$..price')
pprint(all_prices)
# 返回JSONPATH路径索引列表
all_prices = jsonpath.jsonpath(jsonobj,'$..price',result_type='IPATH')
pprint(all_prices)
# 返回JSONPATH表达式字符串
all_prices = jsonpath.jsonpath(jsonobj,'$..price',result_type='')
pprint(all_prices)

结果为:

[8.95, 12.99, 8.99, 22.99, 19.95]
[['store', 'book', '0', 'price'],
 ['store', 'book', '1', 'price'],
 ['store', 'book', '2', 'price'],
 ['store', 'book', '3', 'price'],
 ['store', 'bicycle', 'price']]
["$['store']['book'][0]['price']",
 "$['store']['book'][1]['price']",
 "$['store']['book'][2]['price']",
 "$['store']['book'][3]['price']",
 "$['store']['bicycle']['price']"]

案例:JSONPath综合应用

示例数据如下:

{ "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
    }
  }
}
XPathJSONPath含义
/store/book/author$.store.book[*].author商店中所有图书的作者
//author$..author所有作者
/store/*$.store.*商店中的所有商品
/store//price$.store..price商店中所有商品的价格
//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元的图书
//*$..*整个JSON
import jsonpath
from pprint import pprint

jsonobj ={ "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
    }
  }
}
# 返回所有图书的价格
book_prices = jsonpath.jsonpath(jsonobj,'$.store.book[*].price')
pprint(book_prices)
# 返回所有商品的价格
all_prices = jsonpath.jsonpath(jsonobj,'$..price')
pprint(all_prices)
# 返回商店中所有商品的价格
store_prices = jsonpath.jsonpath(jsonobj,'$.store..price')
pprint(store_prices)
# 返回第三本书的信息
book3 = jsonpath.jsonpath(jsonobj,'$..book[2]')
pprint(book3)
# 返回第三本书的属性列表
book_attr = jsonpath.jsonpath(jsonobj,'$..book[2][*]')
pprint(book_attr)
# 返回第三本书的标题和作者
book_attr = jsonpath.jsonpath(jsonobj,'$..book[2][title,author]')
pprint(book_attr)
# 返回前两本书的信息
books12 = jsonpath.jsonpath(jsonobj,'$..book[:2]')
pprint(books12)
# 返回包含isbn属性的图书信息
isbns = jsonpath.jsonpath(jsonobj,'$..book[?(@.isbn)]')
pprint(isbns)
# 返回价格低于10元的图书
price10 = jsonpath.jsonpath(jsonobj,'$..book[?(@.price<10)]')
pprint(price10)

结果为:

[8.95, 12.99, 8.99, 22.99]
[8.95, 12.99, 8.99, 22.99, 19.95]
[8.95, 12.99, 8.99, 22.99, 19.95]
[{'author': 'Herman Melville',
  'category': 'fiction',
  'isbn': '0-553-21311-3',
  'price': 8.99,
  'title': 'Moby Dick'}]
[{'author': 'Nigel Rees',
  'category': 'reference',
  'price': 8.95,
  'title': 'Sayings of the Century'},
 {'author': 'Evelyn Waugh',
  'category': 'fiction',
  'price': 12.99,
  'title': 'Sword of Honour'}]
['fiction', 'Herman Melville', 'Moby Dick', '0-553-21311-3', 8.99]
['Moby Dick', 'Herman Melville']
[{'author': 'Herman Melville',
  'category': 'fiction',
  'isbn': '0-553-21311-3',
  'price': 8.99,
  'title': 'Moby Dick'},
 {'author': 'J. R. R. Tolkien',
  'category': 'fiction',
  'isbn': '0-395-19395-8',
  'price': 22.99,
  'title': 'The Lord of the Rings'}]
[{'author': 'Nigel Rees',
  'category': 'reference',
  'price': 8.95,
  'title': 'Sayings of the Century'},
 {'author': 'Herman Melville',
  'category': 'fiction',
  'isbn': '0-553-21311-3',
  'price': 8.99,
  'title': 'Moby Dick'}]
多图详解VSCode搭建Python开发环境 本文通过多图的方式详细介绍了VSCode搭建Python开发环境,希望能对学习Python的同学们有所帮助。 文章目录 1. VSCode的介绍和安装 2. 安装插件 2.1 安装中文插件 2.2 安装Python插件 2.3 安装远程插件 3. 远程连接服务器 3.1 配置ssh 3.2 运行代码 3.3 调试代码 阅读详情

相关推荐

Windows Server 搭建ftp服务

Windows Server 搭建ftp服务

ch258563的博客 1010

fastjson(九)JSONPath 的使用(一)

fastjson 1.2.0之后的版本支持JSONPath。这是一个很强大的功能,可以在java框架中当作对象查询语言(OQL)来使用。 一、JSONPath API 介绍 package com.alibaba.fastjson; public class JSONPath { // 求值,静态方法 public static Object

挖坑埋你 1万+

从零到一:uniPush2.0全链路集成与多厂商通道配置实战

本文提供了uniPush2.0从零开始的全链路集成与多厂商通道配置实战指南。详细讲解了DCloud平台配置、uniCloud云函数开发、客户端CID获取与消息监听,并重点攻克了华为、小米、OPPO、vivo等主流厂商推送通道的配置难点与避坑技巧,帮助UniApp开发者实现“一次集成,全端覆盖”的高效消息推送方案。

onion的博客 432

二、Python:Jsonpath语法、使用方法详细介绍及使用Python操作JSON代码示例

JSONPATH是一种路径表达式语言,用于查询特定的JSON格式数据。它提供了一种简单、有效的方法来定位JSON文档中的元素,并支持基本的查询、筛选和操作。它类似于XPath,但是针对JSON对象而不是XML文档。它支持选择器、过滤器和函数等功能,能够方便地从JSON数据中提取所需信息。

SteveRocket's-Blog 4095

ComfyUI安装包运行前准备:安装Git

Git 是一个分布式版本控制系统(Version Control System, VCS),用于跟踪和管理文件(尤其是代码)的变更历史。 简单理解就是,git是用来管理文件的版本的,如果有新的版本,就可以使用git来更新。

聚梦小课堂 2万+

ROS入门必学导航算法——Navigation

该平台集成了多款无人车底盘,包括履带式、四轮差速、阿克曼、麦克纳姆轮底盘等,以满足不同形式和配置的需求,并搭载了RTK定位系统、双目相机、深度相机和激光雷达等多种传感器,以满足开发者的科研需求。amcl节点接收里程计数据(通过"odom"话题)和激光雷达数据(通常通过"scan"话题),结合已知的地图,实时地估计出机器人在该地图上的位置。在ROS中,这是通过"tf库"变换实现的,通过将传感器数据转换到共同的参考系中,系统可以更容易地集成来自不同传感器的数据,并确保它们在相同的空间和时间范围内可用。

AMOVLAB(阿木实验室) 2908

实例分享:用JsonPath来做接口测试

我们在做接口测试的时候,返回的json结构比较复杂,特别是嵌套比较多的时候,就不太好处理。有没有比较简便的方法呢? 肯定是有的,python里面有jsonpath,jsonpath-rw等模块来快速处理json结构。这两个模块差不多,讲讲其中的jsonpath吧。 JsonPath模块 1、JsonPath介绍 用来解析多层嵌套的json数据;JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python, PHP 和 Java.

公众号:【伤心的辣条】 711

MIMIC数据库基本信息分析

一、MIMIC数据库中26张表介绍 数据库中一共有26张表,记录患者入院的各种信息,每张表的介绍如下所示。 表格名 信息 admission 患者基本信息,比如性别、种族、语言、宗教、婚姻、入院和出院时间、死亡时间等 callout 提供病人准备从ICU转出或者已经从ICU转出时相关信息 caregivers 记录医护人员信息(ID、类型、附加...

m0_37520426的博客 1万+

JsonPath详解

JsonPath是用来解析多层嵌套的JSON数据。可以认为JsonPath就是JSON版本的XPath。它是一种信息抽取类库,是从JSON文档中抽取指定信息的工具。JsonPath对于JSON来说,就相当于XPath之于XML。@Test//自定义谓词@Override。

吴声子夜歌的博客 1万+

YOLO11,ultralytics-main源代码目录结构详解

本文详细介绍了YOLO11框架的ultralytics-main源代码目录结构,帮助用户更好地理解和使用YOLO模型。主要目录包括:docker文件夹,包含多种Docker镜像文件,适用于不同硬件环境;docs文件夹,存放YOLO的说明文档;examples文件夹,提供YOLO使用的示例代码;tests文件夹,包含单元测试模块;ultralytics文件夹,为核心代码所在,包含推理逻辑、配置、数据处理等模块。其中,engine文件夹负责训练和推理引擎,models文件夹存放模型架构,nn定义神经网络结构

qq_30279827的博客 1282

Win11 1 月更新黑屏循环故障技术分析与解决方案

2026年1月30日Windows 11更新引发黑屏循环故障,主要影响2018年前出厂、采用MBR分区及特定BIOS固件的设备,尤其对使用经典版Outlook(POP协议)的用户影响显著。故障表现为系统无限重启黑屏,导致数据访问中断。分析表明,问题源于硬件兼容性、分区格式与系统更新的交互冲突。解决方案包括进入安全模式回滚更新、暂停自动更新、升级驱动/BIOS,以及等待微软官方补丁。建议用户更新前评估硬件兼容性并备份数据,企业环境应建立分阶段更新测试机制。该事件为系统更新风险管理提供了重要参考。

博客 1442

JSONPath使用指南(掌握JSON数据提取)

大家好,在处理 JSON(JavaScript Object Notation)数据时,有时需要从复杂的结构中提取特定部分。JSONPath 就是一个非常有用的工具,它提供了一种简洁而强大的方式来定位和提取 JSON 数据中的元素。无论是在 Web 开发中处理 API 响应,还是在数据处理任务中处理大量 JSON 数据,了解和掌握 JSONPath 都是非常重要的。

若不知道要驶向哪个码头,那么任何风都不会是顺风。 1万+

【Proteus仿真】用24C04与1602LCD设计的简易加密电子密码锁

【Proteus仿真】用24C04与1602LCD设计的简易加密电子密码锁

perseverance51博客 1121

JSONPath(XPath for JSON)解析 JSON教程

1. 介绍 类似于XPath在xml文档中的定位,JsonPath表达式通常是用来路径检索或设置Json的。其表达式可以接受“dot–notation”和“bracket–notation”格式,例如$.store.book[0].title、$[‘store’][‘book’][0][‘title’] JsonPath是一种简单的方法来提取给定JSON文档的部分内容。 JsonPath有许多...

WP8HUB 2万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

JsonPath完全介绍及详细使用教程

Json Path介绍 看它的名字你就能知道,这Json Path和JSON文档有关系,正如XPath之于XML文档一样,JsonPath为Json文档提供了解析能力,通过使用JsonPath,你可以方便的查找节点、获取想要的数据,JsonPath是Json版的XPath。 Json Path语法 JsonPath的语法相对简单,它采用开发语言友好的表达式形式,如果你了解类C语言,对JsonPath就不会感到不适应。 函数 可以在JsonPath表达式执行后进行调用,其输入值为表达式的结果。 过滤器

Sunny王维 4万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java JsonPath | 强大的解析工具 快速处理 Json 语法使用

1. 简介 JSONPath - 用于JSON的XPath 用来解析多层嵌套的json数据;JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具. JsonPath有许多编程语言,如Javascript、Python、PHP、Java等 JsonPath提供的json解析非常强大,它提供了类似正则表达式的语法,基本上可以满足所有你想要获得的json内容。 JS...

qq_41497111的博客 2万+

Python爬虫基础(二):使用xpath与jsonpath解析爬取的数据

JsonPath只能解析json文件,而不是像xpath既可以解析文件,也可以直接解析字符串。所以说,想要使用JsonPath解析JSON,只能将爬取的json数据保存到本地之后,才能进行解析。XPathJSONPath表示根元素当前元素. or []子元素n/a父元素//递归下降,JSONPath是从E4X借鉴的。通配符,表示所有的元素n/a属性访问字符[][]子元素操作符[,]连接操作符在XPath 结果合并其它结点集合。JSONP允许name或者数组索引。

秃了也弱了 3041

JsonPath | FastJson的JSONPath使用

一. 简介 JSONPath - 用于JSON的XPath 用来解析多层嵌套的json数据;JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具. JsonPath有许多编程语言,如Javascript、Python、PHP、Java等 JsonPath提供的json解析非常强大,它提供了类似正则表达式的语法,基本上可以满足所有你想要获得的json内容。 JSONPathGitHub:https://github.com/json-path/JsonPath ...

Sunny的专栏 5429

使用JSONPath解析json数据

使用JSONPath解析json数据审核中 之前学习爬虫的时候,如果是 HTML 的数据,通过 xpath 或是 css 选择器,就能很快的获取我们想要的数据,如果是 json 有没有类似 xpath 这种,能够直接根据条件定位数据,而不需要自行 json 解析在遍历获取。答案是有的,也就是 JSONPath。 在线测试网址JSONPath 在线验证 所选用的环境是 Node + JavaScript,用到 jsonpath 这个包jsonpath - npm (npmjs.com) 参考链...

kuizuo12的博客 3203

数据提取之JSON与JsonPATH

爬虫最常用1、数据抓取 - json.loads(html)将响应内容由: json 转为 python2、数据保存 - json.dump(item_list,f,ensure_ascii=False)将抓取的数据保存到本地 json文件抓取数据一般处理方式1、txt文件2、csv文件3、json文件4、MySQL数据库5、MongoDB数据库6、Redis数据库。

qq_53256193的博客 2073

Python:JSONPath基本语法和使用示例

基本语法 JSONPath语法元素和对应XPath元素的对比 XPath JSONPath Description / $ 根元素 . @ 当前元素 / . or [] 子元素 .. n/a 父元素 // .. 递归下降,JSONPath是从E4X借鉴的。 * * 通配符,表示所有的元素 @ n/a 属性访问字符 [] [] 子元素操作符 [,] 连接操作符在XPath 结果合并其它结点集合。JSONP允许name或者数组索引。 n/a [start:

彭世瑜的博客 1万+

JSON数据处理利器——Python JSONPath库详解

JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具

powerbiubiu的博客 2976

XPath和JsonPath

  最近在做一个关于可配置爬虫的项目,里面涉及到一些针对爬取内容自定义解析的需求,为了实现这个需求需要能够对html(针对网页)和json(针对app)实现字段定位,在经过一些调研以及参考了部分爬虫框架后,发现了XPath和JsonPath这两种描述语言。 XPath   XPath,全称 XML Path Language,即 XML 路径语言,它是一门可用来在 XML 文档中对元素和属性进行遍...

h294229025的博客 2754

python中jsonpath模块,解析多层嵌套的json数据

python中jsonpath模块,解析多层嵌套的json数据 jsonpath介绍 用来解析多层嵌套的json数据;JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python, PHP 和 Java。 使用方法如: import jsonpath res=jsonpath.jsonpath(dic_name,’KaTeX parse error: Expected 'EOF', got '#' at position 1

weixin_43952651的博客 1953

XPath、Json、Jsonpath

一 XPath 1.0样例: <?xml version="1.0" encoding="ISO-8859-1"?> <bookstore> <book> <title lang="eng">Harry Potter</title> <price>29.99</price> </book> <book> <title...

kzl_knight的博客 1103

爬虫技术深潜:探究 JsonPath 与 XPath 的语法海洋与实战岛屿

JSON,以其轻量级和易于人阅读的特性,成为众多API数据交互的首选格式。它以键值对的形式存储数据,支持嵌套结构。"name": "张三","age": 30,"city": "北京","country": "中国"相比之下,XML则是一种更为通用的数据格式,被设计用来传输和存储数据。它通过标签来定义数据的结构,允许自定义标签且具备强大的文档注释能力。

AI心易行者 1900
上一篇: Numpy简易教程8——简易分析
下一篇: google_trans_new库:谷歌翻译库Googletrans的替代品
mighty13
博客等级 码龄23年 728粉丝 438原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值