先来看一下我的数据结构,每个数据都可能存在children属性,每个children属性中都可能有一个或多个对象。要求找出所有的id,并进行相应的操作。

let data = {
    name:'grandparents',
    children:[{
        id:0,
        name:'parents',
        children:[{
            id:1,
            name:'son',
            sex:'male',
            children:[]
        },{
            id:2,
            name:'daughter',
            sex:'female',
            children:[]
        }]
    },{
        id:3,
        name:'aunt',
        children:[]
    }]
}

      之前一直使用的方式都是递归遍历,以获取全部的id。最近了解到了JSONPath的存在,让我心情很激动。这么好用的工具,我竟然现在才知道,必须推荐给大家。官方文档在此

      使用方法并不难,但文档是英文的,所以在这里总结一下。

1、安装

npm install JSONPath

2、引入

//In node.js:
var JSONPath = require('JSONPath');
// or
import JSONPath from 'JSONPath';

//For browser usage 
<script src="lib/jsonpath.js"></script>

3、使用

JSONPath({
    json: obj, //需要处理的json数据,必需
    path: path, //路径表达式,可以理解为处理数据的规则,可以是字符串或数字,必需
    callback: callback
});
// or
JSONPath(options, path, obj, callback, otherTypeCallback);

4、实例——以上述data为例

// 数据中全部的id
const idArr = this.JSONPath({
    json:data,
    path:'$..aliasId'
})
console.log(idArr);    //[0,1,2,3]

// 过滤数据中,所有具有sex属性的对象
const objArr = this.JSONPath({
    json:data,
    path:'$..children[?(@.sex)]'
})
console.log(objArr);    
//[{
//     id:1,
//     name:'son',
//     sex:'male',
//     children:[]
//},{
//     id:2,
//     name:'daughter',
//     sex:'female',
//     children:[]
//}]

5、path操作符

$ 查询根元素
. 子节点
.. 所有节点
* 通配符
@ 通常在过滤表达式中使用,表示需要过滤的节点
[number] 数组索引
[start:end] 数组切片
[?(<expression>)] 过滤表达式,表达式支持的函数和运算符可参考这里

 

 

 

 

 

 

 

 


版权声明:本文为qq_26834399原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_26834399/article/details/106645961