您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > javascript

JsonPath详细使用教程,你了解多少?

时间:2023-09-12 15:58:05  来源:今日头条  作者:九天银河888

Json Path介绍

看它的名字你就能知道,这Json Path和JSON文档有关系,正如XPath之于XML文档一样,JsonPath为Json文档提供了解析能力,通过使用JsonPath,你可以方便的查找节点、获取想要的数据,JsonPath是Json版的XPath。

JsonPath语法

  • $ 表示文档的根元素
  • @ 表示文档的当前元素
  • .node_name 或 ['node_name'] 匹配下级节点
  • [index] 检索数组中的元素
  • [start:end:step] 支持数组切片语法
  • * 作为通配符,匹配所有成员
  • .. 子递归通配符,匹配成员的所有子元素
  • (<expr>) 使用表达式
  • ?(<boolean expr>)进行数据筛选

XPath与JsonPath比较

XPath

JsonPath

说明

/

$

文档根元素

.

@

当前元素

/

.或[]

匹配下级元素

..

N/A

匹配上级元素,JsonPath不支持此操作符

//

..

递归匹配所有子元素

*

*

通配符,匹配下级元素

@

N/A

匹配属性,JsonPath不支持此操作符

[]

[]

下标运算符,根据索引获取元素,XPath索引从1开始,JsonPath索引从0开始

`

`

[,]

N/A

[start:end:step]

数据切片操作,XPath不支持

[]

?()

过滤表达式

N/A

()

脚本表达式,使用底层脚本引擎,XPath不支持

()

N/A

分组,JsonPath不支持

示例

下面是相应的JsonPath的示例,代码来源于
https://goessner.NET/articles/JsonPath/,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
		}
	}
}

解析情况如下:

XPath

JsonPath

Result

/store/book/author

$.store.book[*].author

所有book的author节点

//author

$..author

所有author节点

/store/*

$.store.*

store下的所有节点,book数组和bicycle节点

/store//price

$.store..price

store下的所有price节点

//book[3]

$..book[2]

匹配第3个book节点

//book[last()]

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

匹配倒数第1个book节点

//book[position()<3]

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

匹配前两个book节点

//book[isbn]

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

过滤含isbn字段的节点

//book[price<10]

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

过滤price<10的节点

//*

$..*

递归匹配所有子节点

可以在http://jsonpath.com/站点进行验证JsonPath的执行效果。

JAVA中使用

pom中引用

        <dependency>
            <groupId>com.jayway.jsonpath</groupId>
            <artifactId>json-path</artifactId>
            <version>2.4.0</version>
        </dependency>

通常是直接使用静态方法API进行调用,例如:

String json = "...";
List<String> authors = JsonPath.read(json, "$.store.book[*].author");

但以上方式仅仅适用于解析一次json的情况,如果需要对同一个json解析多次,不建议使用,因为每次read都会重新解析一次json,针对此种情况,建议使用ReadContext、WriteContext,例如:

String json = "...";
 
ReadContext ctx = JsonPath.parse(json);
 
List<String> authorsOfBooksWithISBN = ctx.read("$.store.book[?(@.isbn)].author");
 
List<Map<String, Object>> expensiveBooks = JsonPath
                            .using(configuration)
                            .parse(json)
                            .read("$.store.book[?(@.price > 10)]", List.class);


Tags:JsonPath   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除。
▌相关推荐
Json Path介绍看它的名字你就能知道,这Json Path和JSON文档有关系,正如XPath之于XML文档一样,JsonPath为Json文档提供了解析能力,通过使用JsonPath,你可以方便的查找节点、获取想...【详细内容】
2023-09-12  Tags: JsonPath  点击:(0)  评论:(0)  加入收藏
最近在思考构建一个服务编排(Service Orchestration)系统,考虑这个系统至少需要具备以下特征:使用统一的方法定义服务功能单元使用一种通用的方式将一个或多个服务的输出映射到...【详细内容】
2023-08-29  Tags: JsonPath  点击:(25)  评论:(0)  加入收藏
XML和Json不仅是结构化文本,而且擅长表示多层数据,可承载足够通用和足够丰富的信息,因此常被用于各种数据交换和信息传递事务,比如WebService/Restful,微服务等。但多层数据要比...【详细内容】
2022-07-26  Tags: JsonPath  点击:(172)  评论:(0)  加入收藏
▌简易百科推荐
译者 | 刘汪洋审校 | 重楼概括:这篇文章介绍了 JavaScript 中各种循环语句的特点和性能,以及如何根据不同的场景选择合适的循环方式。文章通过一些实例和测试,给出了一些使用循...【详细内容】
2023-09-13    51CTO  Tags:JavaScript   点击:(2)  评论:(0)  加入收藏
Json Path介绍看它的名字你就能知道,这Json Path和JSON文档有关系,正如XPath之于XML文档一样,JsonPath为Json文档提供了解析能力,通过使用JsonPath,你可以方便的查找节点、获取想...【详细内容】
2023-09-12  九天银河888  今日头条  Tags:JsonPath   点击:(0)  评论:(0)  加入收藏
作者丨P. Rehan编译丨诺亚“Node.js有危险了!”“任何能够自救的开发人员都应该尽快迁移到另一个后端环境!”JavaScript的仇恨者说。不用理会这些言论。Node.js将继续存在,并...【详细内容】
2023-09-09    51CTO  Tags:Node.js   点击:(4)  评论:(0)  加入收藏
根据 MDN:“闭包是捆绑在一起(封闭)的函数及其周围状态(词法环境)的引用的组合。换句话说,闭包使您可以从内部函数访问外部函数的作用域。在 JavaScript 中,每次创建函数时都会创建...【详细内容】
2023-09-07  web前端开发  微信公众号  Tags:JavaScript   点击:(9)  评论:(0)  加入收藏
JavaScript 依靠抛出异常来处理错误,而 Go 和 Rust 将它们视为值。 你可能认为这没什么大不了的&hellip;&hellip;但是,孩子,这可能听起来微不足道; 然而,它改变了游戏规则。那么,...【详细内容】
2023-09-07  启辰8  今日头条  Tags:TypeScript   点击:(9)  评论:(0)  加入收藏
你一定听说过 console.log() ,而且可能一直在使用它。它非常流行,在集成开发环境中键入时,Visual Studio Intellicode 等工具通常会在其他控制台方法之前推荐使用它。在本文中,...【详细内容】
2023-09-06  大迁世界  微信公众号  Tags:JavaScript   点击:(20)  评论:(0)  加入收藏
JavaScript 是一种功能强大的语言,是网络的主要构建块之一。这种强大的语言也有一些怪癖。例如,您是否知道 0 === -0 的计算结果为 true,或者 Number("") 的结果为 0?问题是,有时...【详细内容】
2023-09-05  web前端开发  微信公众号  Tags:JavaScript   点击:(25)  评论:(0)  加入收藏
数组,是 JavaScript 中的基本数据结构,允许我们存储和操作值的集合。通常,数组可以嵌套,这意味着它们包含其他数组作为元素。虽然嵌套数组对于组织数据很有用,但在某些情况下我们...【详细内容】
2023-09-04  web前端开发  微信公众号  Tags:JavaScript   点击:(32)  评论:(0)  加入收藏
Three.js 是一个开源的 JavaScript 3D 图形库,用于创建和展示高性能、交互式的 3D 图形场景。它建立在 WebGL 技术之上,并提供了丰富的功能和工具,使开发者可以轻松地构建令人...【详细内容】
2023-09-01  前端充电宝  微信公众号  Tags:JavaScript   点击:(33)  评论:(0)  加入收藏
作者丨Cal Paterson编译丨诺亚Csvbase是一个托管表数据的网站。关于csvbase有一点不寻常的是,当我编写它时,我没有编写任何 Javascript。大多数我没有写的 Javascript 分为以...【详细内容】
2023-09-01    51CTO  Tags:Javascript   点击:(26)  评论:(0)  加入收藏
站内最新
站内热门
站内头条