本文介绍了使用多个键在多层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树中搜索
发布评论