我正在尝试解析此JSON文件(向下编辑以节省空间)
{
"status": "ok",
"count": 1,
"data": {
"1002009609": {
"clan": null,
"achievements": {
"medal_le_clerc": 1,
"tank_expert_ussr": 1,
"evileye": 66,
"mechanic_engineer_china": 1,
"medal_nikolas": 0,
"scout": 834
},
"all": {
"spotted": 152645,
"hits": 444587,
"battle_avg_xp": 423,
"draws": 1145,
"wins": 42739,
},
"company": {
"spotted": 18,
"hits": 84,
"battle_avg_xp": 573,
"draws": 0,
"wins": 19,
},
"max_xp": 2530
},
"nickname": "Definder"
}
}
}
但是,不是通过每个项目并使用data.data[i].____
有没有办法存储每一对而不特别声明每个名称?
现在我正在使用它:
$.getJSON(linkClicked, function (data) {
var person = data.data[id], array = [];
if (person) {
array.push('<h3>' + person.nickname + '</h3>');
array.push('<div class="achievements"><h5>Achievements</h5><ul>');
array.push('<li>diehard: ' + person.achievements.diehard + '</li>');
array.push('<li>kamikaze: ' + person.achievements.kamikaze + '</li>');
array.push('<li>iron_man: ' + person.achievements.iron_man + '</li>');
array.push('</ul></div>'); //end of achievements
}
$('#person').html(array.join(''));
});
但是我希望我进入achievements
并使用一系列循环推动每一对,然后转到all
,依此类推。
到目前为止,这是项目的JSFiddle link。
提前致谢!
答案 0 :(得分:1)
的 jsFiddle Demo
强> 的
你需要递归才能做到这一点。当然,您可以使用each
或单个for in
循环,但这些只会放弃复杂对象的表面。
使用父(人)从您的点击事件处理程序调用递归函数,并将数组传入构建。
if (person) {
array.push('<h3>' + person.nickname + '</h3>');
buildDisplay(person,array,true);
}
接下来,制作递归buildDisplay函数。
function buildDisplay(parent,arr,top){
for( var item in parent ){
if(toString.call(parent[item]) == "[object Object]"){
arr.push('<div class="'+item+'"><h5>'+item+'</h5><ul>');
buildDisplay(parent[item],arr,false);
arr.push('</ul></div>');
}else{
if(top)continue;
arr.push('<li>'+item+': ' + parent[item] + '</li>');
}
}
}
现在您已准备好查看the results
答案 1 :(得分:0)
您可以使用jQuery的each
函数:
var PERSON_OBJECTS = ["achievements", "all", "company"];
function capitalize(string) {
return string.replace(/\b[\w]/g, function(match){return match.toUpperCase()});
}
....
$.each(PERSON_OBJECTS, function(name) {
array.push('<div class="'+name+'"><h5>'+capitalize(name)+'</h5><ul>');
$.each(person[name], function(value, key) {
array.push('<li>'+key+': '+value+'</li>');
});
array.push('</ul></div>');
});
答案 2 :(得分:0)
我建议 $。每次结束,因为 for 经常会产生意外结果。
var person = data.data[id], array = [];
array.push('<h3>' + person.nickname + '</h3>');
//begin of achievements
$.each(person.achievement, function(key, item){
array.push('<li>' + key + ':' + item + '</li>');
});
array.push('</ul></div>'); //end of achievements