使用多个键在多层JSON树中搜索

编程入门 行业动态 更新时间:2024-10-26 04:29:21
本文介绍了使用多个键在多层JSON树中搜索的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我有一个具有以下结构的json树

I have a json tree with following structure

{ "treeId": "avhsgdkendkfhjsdoiendsj", "groupResponse": { "description": null, "id": "avhsgdkendkfhjsdoiendsj", "mAttr": null, "mAttrVal": null }, "childResponse": [ { "treeId": "6p263uh38xvnchmsrw2jn48ut", "childResponse": [], "groupResponse": { "description":null, "id ":"6p263uh38xvnchmsrw2jn48ut", "mAttr": "xxx", "mAttrVal": "222" } }, { "treeId": "2fywxwi93lg7fqggdqqpqxvpg", "childResponse": [], "groupResponse": { "description ":null, "id": "2fywxwi93lg7fqggdqqpqxvpg", "mAttr": "xxx", "mAttrVal": "111" } } ] }

我想基于单/多键搜索节点,例如{ "mAttr": "xxx", "mAttrVal","222"}

I want to search for a node based on single/multiple key(s) e.g. { "mAttr": "xxx", "mAttrVal","222"}

我在此答案中找到了解决方案

I found a solution mentioned in this answer

Object.prototype.findKey = function(keyObj) { var p, key, val, tRet; for (p in keyObj) { if (keyObj.hasOwnProperty(p)) { key = p; val = keyObj[p]; } } for (p in this) { if (p == key) { if (this[p] == val) { return this; } } else if (this[p] instanceof Object) { if (this.hasOwnProperty(p)) { tRet = this[p].findKey(keyObj); if (tRet) { return tRet; } } } } return false; };

它可以基于任何单个键进行搜索.如何修改它以与多个键一起使用?我的树的深度没有限制.

It can search based on any single key. How to modify it to work with multiple keys? There is no limit to the depth of my tree.

推荐答案

以下内容可能会有所帮助,

The following might help,

var data = { 'treeId': 'avhsgdkendkfhjsdoiendsj', 'groupResponse': { 'description': null, 'id': 'avhsgdkendkfhjsdoiendsj', 'mAttr': null, 'mAttrVal': null }, 'childResponse': [ { 'treeId': '6p263uh38xvnchmsrw2jn48ut', 'childResponse': [ ], 'groupResponse': { 'description': null, 'id ': '6p263uh38xvnchmsrw2jn48ut', 'mAttr': 'xxx', 'mAttrVal': '222' } }, { 'treeId': '2fywxwi93lg7fqggdqqpqxvpg', 'childResponse': [ ], 'groupResponse': { 'description ': null, 'id': '2fywxwi93lg7fqggdqqpqxvpg', 'mAttr': 'xxx', 'mAttrVal': '111' } } ] }; var search = function(data, qObj){ var i, k, matched = true, set = []; for (k in qObj) { if(!qObj.hasOwnProperty(k)) continue; if(!data.groupResponse.hasOwnProperty(k) || data.groupResponse[k] != qObj[k]){ matched = false; break; } } if(matched){ set.push(data.groupResponse); } for(i = 0; i < data.childResponse.length; i++){ s = search(data.childResponse[i], qObj); Array.prototype.push.apply(set, s); } return set; } console.log(search(data, { "mAttr": "xxx", "mAttrVal": "222"}));

输出:

[{"description":null,"id ":"6p263uh38xvnchmsrw2jn48ut","mAttr":"xxx","mAttrVal":"222"}]

希望这会有所帮助

更多推荐

使用多个键在多层JSON树中搜索

本文发布于:2023-10-16 10:39:34,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1497331.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:多个   多层   JSON

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!