jsonpath 是一个json操作的第三方库,有了他,就可以方面的操作json,无论在服务器端还是在浏览器端。深度节点进行检索和更新json内部的内容。符合元数据的思想。
jsonpath
使用JSONPath表达式查询JavaScript对象。Node.js的健壮/安全JSONPath引擎
1 | var cities = [ |
安装
从npm安装:
1 | $ npm install jsonpath |
JSONPath语法
以下是根据Stefan Goessner在2007年介绍JSONPath 的原始帖子改编的语法和示例。
JSONPath
描述
$
根对象/元素
@
当前对象/元素
.
儿童会员运营商
..
递归后代运算符; JSONPath借用了E4X的这种语法
*
通配符匹配所有对象/元素,无论其名称如何
[]
下标运营商
[,]
用于替代名称或数组索引的联合运算符作为集合
[start:end:step]
从ES4 / Python借来的数组切片运算符
?()
通过静态评估应用过滤器(脚本)表达式
()
通过静态评估来编写脚本
给定此示例数据集,请参阅下面的示例表达式:
1 | { |
示例JSONPath表达式:
JSONPath
描述
$.store.book[*].author
商店里所有书籍的作者
$..author
所有作者
$.store.*
商店里的所有东西,都是一些书和一辆红色的自行车
$.store..price
商店里一切的价格
$..book[2]
第三本书
$..book[(@.length-1)]
最后一本书通过脚本下标
$..book[-1:]
通过切片的最后一本书
$..book[0,1]
前两本书通过下标联合
$..book[:2]
前两本书通过下标数组切片
$..book[?(@.isbn)]
使用isbn number过滤所有书籍
$..book[?(@.price<10)]
过滤所有比10便宜的书籍
$..book[?(@.price==8.95)]
过滤所有费用为8.95的书籍
$..book[?(@.price<30 && @.category=="fiction")]
过滤所有低于30的小说书籍
$..*
JSON结构的所有成员
方法
jp.query(obj,pathExpression [,count])
在obj
匹配中查找元素pathExpression
。返回满足提供的JSONPath表达式的元素数组,如果没有匹配则返回空数组。count
如果指定,仅返回第一个元素。
var authors = jp.query(data, ‘$..author’);
// [ ‘Nigel Rees’, ‘Evelyn Waugh’, ‘Herman Melville’, ‘J. R. R. Tolkien’ ]
jp.paths(obj,pathExpression [,count])
在obj
匹配中查找元素的路径pathExpression
。返回满足提供的JSONPath表达式的元素路径数组。每个路径本身是一个键数组,表示obj
匹配元素内的位置。count
如果指定,仅返回第一个路径。
1 | var paths = jp.paths(data, '$..author'); |
jp.nodes(obj,pathExpression [,count])
在obj
匹配中查找元素及其对应的路径pathExpression
。返回一个节点对象数组,其中每个节点都path
包含一个键数组,表示其中的位置obj
,并value
指向匹配的元素。count
如果指定,仅返回第一个节点。
1 | var nodes = jp.nodes(data, '$..author'); |
jp.value(obj,pathExpression [,newValue])
返回第一个匹配元素的值pathExpression
。如果newValue
提供,则设置第一个匹配元素的值并返回新值。
jp.parent(obj,pathExpression)
返回第一个匹配元素的父级。
jp.apply(obj,pathExpression,fn)
fn
在每个匹配元素上运行提供的函数,并使用函数的返回值替换每个匹配元素。该函数接受匹配元素的值作为其唯一参数。返回匹配节点及其更新值。
1 | var nodes = jp.apply(data, '$..author', function(value) { return value.toUpperCase() }); |
jp.parse(pathExpression)
将提供的JSONPath表达式解析为路径组件及其关联的操作。
1 | var path = jp.parse('$..author'); |
jp.stringify(路径)
给定路径,以字符串形式返回路径表达式。所提供的路径可以是jp.nodes
例如由例如返回的平面数组的键,或者可替代地是以返回的路径组件阵列的形式的完全解析的路径表达式jp.parse
。
1 | var pathExpression = jp.stringify(['$', 'store', 'book', 0, 'author']); |