我有一个巨大的json对象,其中包含对象和属性,以及更多继续使用的对象和属性。我需要一种递归方式来获取所有属性键并按级别输出
例如:
{
"references":[
{"id":"00-0031280","origin":"gsis"},
{"id":"CAR358797","origin":"elias"},
{"id":"41265","origin":"nflx"}
],
"team":{
"name":"Raiders",
"market":"Oakland",
"alias":"OAK",
"id":"1c1cec48-6352-4556-b789-35304c1a6ae1"
},
"name": "Name",
"jersey": "08"
}
我需要以某种方式在这个对象中循环并且逐个返回json对象键的整个深度,所以应该返回这个,每行从for循环输出:
references_0_id
references_0_origin
references_1_id
references_1_origin
references_2_id
references_2_origin
team_name
team_market
team_alias
team_id
name
jersey
到目前为止,我有类似的东西,但它不够好,因为它没有正确循环......
function eachRecursive(obj, aKey)
{
aKey = aKey === null ? '' : aKey;
for (var k in obj)
{
if (typeof obj[k] == "object" && obj[k] !== null)
{
aKey += k + '_';
eachRecursive(obj[k], aKey);
}
else
{
if (obj.hasOwnProperty(k))
{
$('.output').append($('<p />').text(aKey + k));
}
// might not even need this.
aKey = '';
}
}
}
aKey
的输出似乎有问题,基本上,aKey
+ k
我认为会给我结果我试图到达这里,但是aKey
保持不变,而且没有得到妥善清理。
有人可以帮我这个功能吗?一直试图让输出正常工作一段时间没有运气。
**编辑
这是一个演示问题的jsfiddle:
答案 0 :(得分:1)
您的问题是,您在循环内不断修改aKey
,而在追加_
时不会从其初始值开始。您只需更改代码即可解决此问题:
eachRecursive(obj[k], aKey + k + '_');
并删除修改aKey
答案 1 :(得分:0)
尝试使用$.map()
,$.isArray()
,$.isPlainObject()
,Object.keys()
var res = $.map(data, function(value, key) {
if ($.isArray(value)) {
return $.map(value, function(v, k) {
return Object.keys(v).map(function(n, i) {
return key + "_" + k + "_" + n
})
});
}
if ($.isPlainObject(value)) {
return Object.keys(value).map(function(n, i) {
return key + "_" + i + "_" + n
});
} else {
return key
}
});
var data = {
"references":[
{"id":"00-0031280","origin":"gsis"},
{"id":"CAR358797","origin":"elias"},
{"id":"41265","origin":"nflx"}
],
"team":{
"name":"Raiders",
"market":"Oakland",
"alias":"OAK",
"id":"1c1cec48-6352-4556-b789-35304c1a6ae1"
},
"name": "Name",
"jersey": "08"
}
var res = $.map(data, function(value, key) {
if ($.isArray(value)) {
return $.map(value, function(v, k) {
return Object.keys(v).map(function(n, i) {
return key + "_" + k + "_" + n
})
});
}
if ($.isPlainObject(value)) {
return Object.keys(value).map(function(n, i) {
return key + "_" + i + "_" + n
});
} else {
return key
}
});
console.log(res)
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
&#13;