JSON 与 JSONPath

JSONPath 是一种JSON查询语言,其功能类似于XML 的 XPath。JSONPath 用于从 JSON 文档中选择和提取子部分.

1. JSONPath 依赖关系

要使用 JSONPath,我们需要包含它的依赖项,然后使用它.

语言
依赖性
JavaScript
Node
npm install JSONPath
PHP
Python
pip install jsonpath-rw
Java

2. JSONPath 语法

JsonPath 表达式以美元符号($)字符开头,它指的是查询的根元素。美元符号后跟一系列子元素,这些子元素通过点(代码)表示法或方括号(代码)分隔.

重要的 JSONPath 语法规则是:

  • $ 符号指的是根对象或元素.
  • @ 符号指的是 当前对象或元素.
  • . 运算符是dot-child运算符,用于表示当前元素的子元素.
  • [ ] 是下标运算符,用于表示当前元素的子元素(按名称或索引).
  • * 运算符是通配符,返回 所有对象或元素,无论其名称如何.
  • , 操作符是合并操作符, 返回 子集的并集 或指示的索引.
  • : 运算符是数组切片运算符,因此您可以使用语法[start:end:step] 对集合进行切片,以返回集合的子集合.
  • ( ) 运算符允许您以底层实现的脚本语言传递脚本表达式。然而,并非所有 JSONPath 实现都支持它.
  • ? ( ) 查询符合特定条件的所有项目.

3. JSONPath 表达式示例

下面给出了 JSONPath 的几个示例.

$.store.book[0].title
$.store.book[*].title
$..book[3]

//or using brackets

$['store']['book'][0].['title']
$['store']['book'][*].['title']
$..['book'][3]

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

4. 使用 JavaScript 的 JSONPath 示例

我们有以下 JSON 文档。我们将对其应用 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
		}
	}
}

例 1

使用 JSONPath 查找所有作者的姓名.

var response = jsonPath(store , "$..author").toJSONString();

程序输出:

[
"Nigel Rees",
"Evelyn Waugh",
"Herman Melville",
"J. R. R. Tolkien"
]

例 2

使用 JSONPath 查找第 4 本书的详细信息。数组索引从零开始.

var response = jsonPath(store , "$..book[3]").toJSONString();

程序输出:

[
	{
		"category":"fiction",
		"author":"J. R. R. Tolkien",
		"title":"The Lord of the Rings",
		"isbn":"0-395-19395-8",
		"price":22.99
	}
]