使用Javascript将Json过滤的键值推送到嵌套的ul

时间:2015-03-20 22:45:48

标签: javascript jquery html json multidimensional-array

我需要帮助从过滤的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

1 个答案:

答案 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列表。

同样,这可能不完全是你所追求的,但我认为主要的用处是使用函数来返回值,而不是仅仅生成它,然后对它做任何事情。