jQuery .each()只打印外部Json的最后一项

时间:2015-02-06 06:23:56

标签: javascript jquery json

我正在尝试使用jQuery进行测验,并从外部Json文件中提取问题和答案。

我的问题是我的foreach循环只打印出Json项目中的最后一个元素。

这是我的Jquery:

function postData(data) {
var html = "";

$.each(data, function(key, value) {

        html += "<ul><h3><span>" + key + "</span></h3>";

        $.each(value.answers, function(i, j){
            html += "<li>" + j.answer + "</li>";
        });

        html += "</ul>";

});

$('#content').append(html);

};

我的Json文件中的数据示例是:

{
"Question Title":
    {
      "answers":
            [{
            "answer" : "answer one",
            "answer" : "answer two",
            "answer" : "answer three",
            "answer" : "answer four"
            }]
    },

"Question title two":
    {
      "answers":
            [{
            "answer" : "True",
            "answer" : "False"
            }]
    }
 }

然而,我得到的唯一答案是:

Question title
- answer 4

Question title two
- False

我只是奇怪地尝试循环它们,还是我没有正确打印对象?

如果您需要我澄清任何事情,请告诉我。谢谢。

2 个答案:

答案 0 :(得分:5)

您的JSON在同一对象中存在重复的属性名称存在缺陷。而不是:

        [{
        "answer" : "answer one",
        "answer" : "answer two",
        "answer" : "answer three",
        "answer" : "answer four"
        }]

你想要这个每个答案属性都在它自己的对象中:

        [
        {"answer" : "answer one"},
        {"answer" : "answer two"},
        {"answer" : "answer three"},
        {"answer" : "answer four"}
        ]

就像你拥有它一样,你是同一个对象中的重复属性名,它只给你最后一个属性的结果,实际上是严格模式下的错误(使用严格模式的另一个原因),因为解释器会标记这个错误适合你。

工作演示:http://jsfiddle.net/jfriend00/zesmjgq7/


您可能还应该修复HTML,因为只有少数<ul> <li><ul><ol>的有效子对象和{{1}不是合法的孩子。您可以将<h3>放在<h3>之前,如下所示:

<ul>

答案 1 :(得分:0)

更改了答案对象

中的键名称
{
"Question Title":
    {
      "answers":
            [{
            "answer1" : "answer one",
            "answer2" : "answer two",
            "answer3" : "answer three",
            "answer4" : "answer four"
            }]
    },

"Question title two":
    {
      "answers":
            [{
            "answer1" : "True",
            "answer2" : "False"
            }]
    }
 };

http://jsfiddle.net/28w23mhh/