Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将Javascript对象/JSON中的所有项分离到数组中_Javascript_Jquery_Json - Fatal编程技术网

如何将Javascript对象/JSON中的所有项分离到数组中

如何将Javascript对象/JSON中的所有项分离到数组中,javascript,jquery,json,Javascript,Jquery,Json,好的,这是Javascript对象/JSON: { "marco":{ "gender":"men", "age":29, "children":{ "jen":{ "gender":"women", "age":14 }, "marco jr.":{ "gender":"m

好的,这是Javascript对象/JSON:

{
    "marco":{
        "gender":"men",
        "age":29,
        "children":{
            "jen":{
                "gender":"women",
                "age":14
            },
            "marco jr.":{
                "gender":"men",
                "age":16,
                "children":{
                    "Koos":{
                        "gender":"men",
                        "age":1
                    }
                }
            }
        }
    },
    "lisa":{
        "gender":"women",
        "age":20
    },
    "mike":{
        "gender":"men",
        "age":32,
        "children":{
            "carl":{
                "gender":"women",
                "age":19
            }
        }
    }
}
我希望,如果我选择marco,输出将是

["jen":{"gender":"women", "age":14}, "marco jr.":{"gender":"men", "age":16}, "Koos":{"gender":"men", "age":1}]
换句话说:一个具有多个图层的大对象需要被切成一个大数组。所以不再有三个物体了


我想不出任何解决方案。

如果使用javascript搜索json对象,请使用json.parse函数

请看这一页


或者,如果您使用PHP使用json_decode方法将其转换为数组,您可以使用递归来实现这一点。当您匹配父级的名称时,您需要将true添加到递归的下一次迭代中,以便它知道要添加到结果中

var obj={marco:{性别:男性,年龄:29岁,儿童:{jen:{性别:女性,年龄:14},小marco:{性别:男性,年龄:16岁,儿童:{Koos:{性别:男性,年龄:1}}}},lisa:{性别:女性,年龄:20},mike:{性别:男性,年龄:32岁,儿童:{carl:{性别:女性,年龄:19}} 函数到ArrayData、名称、父级{ var结果=[]; 对于数据中的var i{ ifi==name | | parent==true{ ifi!=name result.push{[i]:{gender:data[i]。gender,age:data[i]。age} result=result.concatotorarydata[i]。子项,名称,true } result=result.concatotorarydata[i]。子项,名称,false } 返回结果; } console.logJSON.stringifytoArrayobj,'marco',false,0,4 console.logJSON.stringifytoArrayobj,'marco jr',false,0,4
console.logJSON.stringifytoArrayobj'mike',false,0,4这是一个适合递归函数的任务,因为您需要找到Marco的所有子函数,以及它们的所有子函数,依此类推。大概是这样的:

这实质上是展平嵌套对象,因此也可以看到前面的答案,例如


这是假设您希望返回一个以名称作为键的对象,而不是一个只能有索引号的数组。

您确定要在数组中使用非数字键[jen:{?创建一个采用对象和键名的递归函数。使用子对象及其键递归调用。您的结果可能应该是一个对象,而不是其他人已经说过的数组。javascript中没有关联数组,只有索引数组。您可以在另一个stackoverflow问题中了解更多信息:。是的这只是将JSON转换为JS对象,但不是OP想要的方式。感谢您的响应,但正如@George所说,这不是我想要的。感谢这是我一直在寻找的东西!不知道我想展平嵌套对象。JSFIDLE看起来很有希望!现在尝试一下:所以我创建示例对象时犯了一个错误。可以吗请将您的代码调整到此数组:我尝试过这样做,但没有任何运气。。
function getDescendents(family, memberName) {
    function inner(children, r) {
        for (var k in children) {
            if (children.hasOwnProperty(k)) {
                r[k] = {
                    age: children[k].age,
                    gender: children[k].gender
                };
                inner(children[k].children, r);
            }
        }
    }

    var r = {};
    inner(family[memberName].children, r);
    return r;
}
console.log(getDescendents(family, 'marco'));