我需要帮助从过滤的json推送值,我需要生成一个嵌套的ul列表,此时我无法修改json格式,我检查console.log你会看到创建列表的值,此时我无法想象如何完成'for循环'以呈现所需的html标记,任何帮助都将被赞赏,这是jsfiddle http://jsfiddle.net/43jh9hzz/,如果你检查控制台日志,你会看到价值观。
这是Js:
var json='';
var property_set = new Set();
function iterate(obj, stack) {
json="<ul>";
for (var property in obj) {
if (obj.hasOwnProperty(property)) {
if (typeof obj[property] == "object") {
iterate(obj[property], stack + '.' + property);
}
else {
// console.log(property);
property_set.add(property);
json+="<li>";
if(typeof obj[property] !== "number") {
json+="<li>"+obj[property]+"</li>";
console.log(obj[property]);
}
}
} json += "</li>";
}
}
var listEl = document.getElementById('output');
iterate(jsonObj)
这是json格式:
var jsonObj =
{
"level_1": [
{
"level_1_name": "CiscoSingaporeEBC",
"level_2": [
{
"level_2_name": "Khoo Tech Puat",
"level_2_id": 2222,
"level_3": [
{
"name": "Boon Leong Ong",
"id": 6919
},
{
"name": "Kiat Ho",
"id": 6917
},
{
"name": "Overall Experience",
"id": 6918
}
]
}
]
},
{
"level_1_name": "CiscoLondonEBC",
"level_2": [
{
"level_2_name": "Bernard Mathews Ltd.",
"level_2_id": 2367,
"level_3": [
{
"name": "Barry Pascolutti",
"id": 7193
},
{
"name": "Kathrine Eilersten",
"id": 7194
},
{
"name": "Martin Rowley",
"id": 7189
}
]
},
{
"level_2_name": "FNHW Day 1",
"level_2_id": 5678,
"level_3": [
{
"name": "Jurgen Gosch",
"id": 7834
},
{
"name": "Overall Experience",
"id": 7835
}
]
},
{
"level_2_name": "Groupe Steria Day 1",
"level_2_id": 2789,
"level_3": [
{
"name": "Adam Philpott",
"id": 7919
},
{
"name": "Pranav Kumar",
"id": 7921
},
{
"name": "Steve Simlo",
"id": 7928
}
]
}
]
}
]
};
enter code here
答案 0 :(得分:0)
我不确定我是否正确解释了您的请求,但我认为这就是您想要的:http://jsfiddle.net/mooreinteractive/43jh9hzz/1/
基本上,你正在调用iterate函数来运行,但那就是它。该函数实际上还需要返回它生成的值。
在for循环完成后,我已添加到函数的末尾:
return json;
现在该函数返回它生成的值,但也有一些其他问题。当您在iterate函数内再次递归调用iterate函数时,实际上您希望将它返回的内容添加到包含所有返回值的当前json字符串中。
所以在那条线上我改变了它:
iterate(obj[property], stack + '.' + property);
到
json += iterate(obj[property], stack + '.' + property);
现在,在第一次运行函数的主列表中,其他值也将返回。好的,这非常接近,但还有一件小事。我想当你添加额外的周围LI时,你实际上想要做一个UL。我将它们更改为UL,现在我认为结果就像是表示JSON对象的文本部分的UL / LI列表。
同样,这可能不完全是你所追求的,但我认为主要的用处是使用函数来返回值,而不是仅仅生成它,然后对它做任何事情。