一.简介
XML 的一个经常强调的优点是提供了大量工具来分析、转换和有选择地从 XML 文档中提取数据。XPath 就是这些强大的工具之一。
现在是时候想知道,是否需要像 XPath4JSON 这样的东西,以及它可以解决哪些问题。
无需特殊脚本,即可以交互方式从客户端上的 JSON 结构中查找和提取数据。
客户端请求的JSON数据可以减少到服务器上的相关部分,从而最大限度地减少服务器响应的带宽使用。
如果我们同意,从手头的JSON结构中挑选零件的工具确实有意义,那么就会出现一些问题。它应该如何完成它的工作?JSONPath 表达式是什么样子的?
由于 JSON 是 C 系列编程语言数据的自然表示,因此特定语言具有访问 JSON 结构的本机语法元素的可能性很高。
以下 XPath 表达式
/store/book[1]/title
看起来像
x.store.book[0].title
或
x[‘store’][‘book’][0][‘title’]
在 Javascript、Python 和 PHP 中,带有一个包含 JSON 结构的变量。在这里,我们观察到,特定语言通常已经内置了基本的 XPath 功能。
二.jsonpath表达式
JSONPath 表达式始终引用 JSON 结构,其方式与 XPath 表达式与 XML 文档结合使用的方式相同。由于 JSON 结构通常是匿名的,并且不一定具有“根成员对象”,因此 JSONPath 采用分配给外部级别对象的抽象名称。$
JSONPath 表达式可以使用点表示法
$.store.book[0].title
或括号表示法
$[‘store’][‘book’][0][‘title’]
用于输入路径。内部路径或输出路径将始终转换为更通用的括号表示法。
JSONPath 允许成员名称和数组索引使用通配符 *。 它借用了 E4X 的后代运算符 ‘…’ 和 ECMASCRIPT 4 的数组切片语法建议。[start :end :step]
基础脚本语言的表达式可以用作显式名称或索引的替代方法,如(< expr>)
$.store.book[(@.length-1)].title
使用符号“@”表示当前对象。筛选表达式通过以下语法支持,如下所示?(< boolean expr>)
$.store.book[?(@.price < 10)].title
以下是 JSONPath 语法元素与其 XPath 对应项的完整概述和并排比较。
三.例子
{ "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
}
}
}