advanced-json-path
一、概述
JsonPath是xpath在json中的应用,是参照xpath表达式来解析xml文档的方式,用一个抽象的名字$来表示最外层的对象。
在线测试网站:http://jsonpath.com/
二、安装
npm install advanced-json-path
三、JSONPath语法元素
表达式语法 | 含义 | Meaning |
---|---|---|
$ | 根对象 | Root Object |
@ | 当前元素 | Current Object |
. | 子元素 | Child |
... | 递归下降 | Recursive children descent |
* | 通配符,表示所有的元素 | Any object/property |
[ ] | 子元素操作符 | index or quoted child name |
[start : end] | 数组分割操作 | slice operator |
( ) | 脚本表达式 | script expression |
?( ) | 应用过滤表示式 | filter expression |
四、操作示例
js
// 操作对象
let data = {
header: {
"assetNo": "09020000000176",
"equipType": "",
"optCmd": "park_data_9011",
"requestTime": 1513763583639,
"responseTime": 1513763583639,
"dataSource": "0",
"code": 300,
"msg": "数据取得成功。"
},
status: "300",
statusType: "002",
time_status: 1513763583639,
code: 200
};
-
直接取出对应字段的值
let flag = JsonPath(data, '.code'); // 输出 200 let flag = JsonPath(data, '.header.code'); // 输出 300
-
根据条件取出对应字段的值
let flag = JsonPath(data, '.\[?(@.status=="300")\].code'); // 输出 200 let flag = JsonPath(data, '.[?(@.status=="400")].code'); // 输出 false
let flag = JsonPath(data, '$.header[?(@.optCmd=="park_data_9011")].code'); // 输出 300 -
判断多个条件是否成功
判断status= "300"并且statusType="002"
let flag = JsonPath(data, '$.[?(@.status=="300")][?(@.statusType == "002")]');
输出: {
header: {
"assetNo": "09020000000176",
"equipType": "",
"optCmd": "park_data_9011",
"requestTime": 1513763583639,
"responseTime": 1513763583639,
"dataSource": "0",
"code": 300,
"msg": "数据取得成功。"
},
status: "300",
statusType: "002",
time_status: 1513763583639,
code: 200
}
参考地址:
https://www.npmjs.com/package/advanced-json-path
https://blog.csdn.net/weixin_37681471/article/details/79610998
https://blog.csdn.net/sD7O95O/article/details/126376756