Javascript 从json获取所有子节点

Javascript 从json获取所有子节点,javascript,jquery,json,Javascript,Jquery,Json,我有以下json: var source=[{'k':'01'}, {'k':'02', 'children': [ {'k':'05'}, {'k':'06', 'children': [ {'k':'ABC'}, {'k':'PQR'} ]

我有以下json:

    var source=[{'k':'01'},
                {'k':'02', 'children': [
                    {'k':'05'},
                    {'k':'06', 'children': [
                        {'k':'ABC'},
                        {'k':'PQR'}
                    ]},
                    {'k':'07'}
                ]},
                {'k':'03'}];
我希望能够为k指定一个值,并取回所有的子代(以及孙辈和曾孙辈,等等)

例如,如果我提供
'02'
,我希望接收

            [
              {'k':'05'},
              {'k':'06'},
              {'k':'ABC'},
              {'k':'PQR'},  
              {'k':'07'}
            ]

可以遍历与用户输入匹配的数组,然后检查特定元素是否具有要查找的属性。这样试试看

var input = '02';

for(var index in source){
    if(source[index].k == input){
        if(source[index].hasOwnProperty('children')){
            console.log(source[index]); 
        }
    }
}

尝试以下操作:

function mergeChildren(sources) {
  var children = [];
  for (var index in sources) {
    var source = sources[index];
    children.push({k: source.k});
    if (source.children) {
      children = children.concat(mergeChildren(source.children))
    }
  }
  return children;
}

function findChildrenForK(sources, k) {
  for (var index in sources) {
    var source = sources[index];
    if (source.k === k) {
       if (source.children) {
         return mergeChildren(source.children);
       }
    }
  }
}
findChildrenForK
扫描对象数组、
sources
,并将其属性
k
与提供给函数的
k
相匹配。如果找到匹配的对象,我们将对该对象的
children
属性调用
mergeChildren

mergeChildren
迭代给定给它的对象数组,并将每个键推入一个名为
children
的数组。如果任何对象本身有子对象,我们通过递归调用
mergeChildren
并使用函数将它们连接到
children
累加器


请参阅本节中的脚本和示例数据。

您可以尝试下面的代码

$(document).ready(function () {
            var source = [{ 'k': '01' }, { 'k': '02', 'children': [{ 'k': '05' }, { 'k': '06' }, { 'k': '07' }] }, { 'k': '03' }];
            $.each(source, function (i, item) {
                if (item.k == "02")
                {
                    var list = item.children;
                }
            });

        });
尝试此功能:

function getChildren(source, parentId) {
    return $.grep(source, function(parent) {
        // get only parents with matched id
        return parent.k === parentId;
    }).reduce(function(children, parent) {
        // sum all children into one array
        return children.concat(parent.children || []);
    }, []);
}

你能编辑一下你的答案吗。所以,我可以检查一下:)你的代码运行得很好,但是它只显示了孩子而不是孙子。你可以为这个json做这件事吗
var source=[{'k':'01'},{'k':'02','children':[{'k':'05'},{'k':'06','children':[{'k':'ABC'},{'k':'PQR'},{'k':'07'},{'k':'03'}因为它不会为孙子孙女显示在这种情况下,您需要递归。它不会返回孙子孙女:(否则它工作正常
function getChildren(source, parentId) {
    return $.grep(source, function(parent) {
        // get only parents with matched id
        return parent.k === parentId;
    }).reduce(function(children, parent) {
        // sum all children into one array
        return children.concat(parent.children || []);
    }, []);
}