前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >JSONPath 学习笔记

JSONPath 学习笔记

作者头像
授客
发布2024-12-14 09:05:02
发布2024-12-14 09:05:02
10400
代码可运行
举报
文章被收录于专栏:授客的专栏授客的专栏
运行总次数:0
代码可运行

什么是 JSONPath?

JSONPath 是一种类似于 XPath 的查询语言,用于在 JSON 数据中定位和提取特定部分的数据。它提供了一种简洁而强大的方式来导航和检索 JSON 结构中的元素,使得我们可以轻松地从复杂的 JSON 数据中提取所需的信息。

JSONPath表达式

JSONPath引用JSON结构,就像XPath表达式引用XML文档一样。由于JSON结构通常是匿名的,不一定有“根成员对象”,JSONPath假定为最外层对象的抽象名称为$

JSONPath表达式可使用点符

代码语言:javascript
代码运行次数:0
复制
$.store.book[0].title

或者是括号符

代码语言:javascript
代码运行次数:0
复制
$['store']['book'][0]['title']

f用于输入路径。内部或输出路径将始终转换为更通用的括号符。

JSONPath允许使用通配符*表示成员名和数组索引。它借用了后代运算符..来自E4X以及来自ECMASCRIPT 4数组切片语法提议 [start:end:step]

底层脚本语言 (<expr>)的表达式可以用作显式名称或索引的替代方案,如

代码语言:javascript
代码运行次数:0
复制
$.store.book[(@.length-1)].title

使用符号@表示当前对象。通过语法 ?(<boolean expr>) 支持筛选表达式,如

代码语言:javascript
代码运行次数:0
复制
$.store.book[?(@.price < 10)].title

以下是JSONPath语法元素与其XPath对应元素的完整概述和并排比较。

XPath

JSONPath

描述

/

$

根对象/元素

.

@

当前对象/元素

/

. 或 []

获取子元素操作

..

获取父元素操作

//

..

递归下降操作符(后代选择器),用于访问所有匹配的元素,无论它们在JSON结构中的深度如何。

*

*

通配符。匹配所有对象/元素名称或索引。

@

访问属性。 JSON结构没有属性。

[]

[]

下标运算符。XPath使用它来迭代元素集合和谓词. 在Javascript和JSON中,它是原生数组运算符。

`

`

[,]

[start:end:step]

从ES4借鉴的数组切片运算符

[]

?()

应用筛选器(脚本)表达式。

()

使用底层脚本引擎的脚本表达式。

()

Xpath中的分组

XPath提供的(非缩写语法的位置路径、运算符和函数)比这里列出的要多得多。此外,Xpath和JSONPath中下标运算符的工作方式存在显著差异。

  • Path表达式中的方括号始终对括号之前这段路径获取的节点集进行操作。索引始终以1开头。
  • 使用JSONPath方括号对括号之前这段路径获取的对象数组进行操作。索引始终以0开头。

JSONPath 示例

代码语言:javascript
代码运行次数:0
复制
{
	"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
		}
	}
}

XPath

JSONPath

Result

/store/book/author

$.store.book[*].author

获取store中所有book的author

//author

$..author

获取所有authors

/store/*

$.store.*

获取store中的所有东西, 即一些book和bicyle,输出显示上述示例JSON中"book"和"bicyle"键对应值

/store//price

$.store..price

获取store中所有东西的price

//book[3]

$..book[2]

获取第三个book

//book[last()]

$..book[(@.length-1)] $..book[-1:]

按序获取最后一个book

//book[position()<3]

$..book[0,1] $..book[:2]

获取前两个book

//book[isbn]

$..book[?(@.isbn)]

获取所有isbn号为真的book

//book[price<10]

$..book[?(@.price<10)]

获取所有price小于10的book

//*

$..*

获取XML文档中的所有元素。JSON结构中的所有成员。

说明:

过滤器支持常见的逻辑运算符:与(&&)、或(||),非(!)。

示例: 获取所有price小于10且cateogry等于reference的book

代码语言:javascript
代码运行次数:0
复制
$.store.book[?(@.price < 10 && @.category ==  "reference")] 

参考链接

https://goessner.net/articles/JsonPath/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-12-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是 JSONPath?
  • JSONPath表达式
  • JSONPath 示例
  • 参考链接
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档