使用GetJSON Jquery解析复杂的数组

时间:2010-04-29 05:37:49

标签: jquery ajax json arrays getjson

TLDR:

  1. 开始使用this question将其中的一部分工作并在此处继续进行简化。
  2. 我需要'获取'JSON数组
  3. 正确格式化并对阵列中的每个格式将其放置在相应的DIV中。
  4. ...
  5. 有效。

  6. 这是this question的后续行动,以简化和继续。

    我需要一些来自数组的复杂JSON数据。有了它我需要标题和它的价值。我这样做的原因是因为我会知道调用的数组是什么,而不是在其中生成的数据。

    让我们说这个新阵列如下:

        {"Days":
    [{"day": "Sunday", "time": "10.00"},
     {"day": "Monday", "time": "12.00"},
     {"day": "Tuesday", "time": "09.00"},
     {"day": "Wednesday", "time": "10.00"},
     {"day": "Thursday", "time": "02.00"},
     {"day": "Friday", "time": "05.00"},
     {"day": "Saturday", "time": "08.00"}
    ]}
    

    感谢(Matthew Flaschen)

    我需要它来获得周日和周日10.00以及所有其他人的相同。

    我目前解析此问题的代码如下:

    $.getJSON(url,
        function(data){
          $.each(data, function(i,item){
          $('.testfield').append('<p>' + item + '</p>');
          });
        });
    

    如果没有在每个日期添加的时间,它将按如下方式解析数据:

    Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday
    

    随着时间添加到数组中的日期,Firebug不再将其识别为JSON字符串。所以我猜我在这里格式化了一些错误。此外,我每天都需要和是时候换上一条新线我认为

    $('.testfield').append('<p>' + item + '</p>' + '<br />');
    

    会将每一个应用到一个新行,但这不起作用。

    1. 如何让每一天或某个项目换上新的一行?
    2. 如何让$ getjson正确地将数据及其值解析为div?

3 个答案:

答案 0 :(得分:2)

试试这个(重新格式化的JSON - 下次用JSONLint检查你的JSON):

{
    "Days": [
        {
            "Sunday": "10.00",
            "Monday": "12.00",
            "Tuesday": "09.00",
            "Wednesday": "10.00",
            "Thursday": "02.00",
            "Friday": "05.00",
            "Saturday": "08.00" 
        }
    ]
}

使用它的脚本:

 $.getJSON( url, function(data){
  $.each(data.Days[0], function(key,value){
   $('.testfield').append('<p>' + key + ' : ' + value + '</p>');
  });
 });

答案 1 :(得分:1)

这不是有效的JSON。做类似的事情:

{"Days":
[{"day": "Sunday", "time": "10.00"},
 {"day": "Monday", "time": "12.00"},
 {"day": "Tuesday", "time": "09.00"},
 {"day": "Wednesday", "time": "10.00"},
 {"day": "Thursday", "time": "02.00"},
 {"day": "Friday", "time": "05.00"},
 {"day": "Saturday", "time": "08.00"}
]}

始终使用JSONLint或其他验证程序检查语法。

答案 2 :(得分:0)

有点偏离主题,但如果你不确定内容,你应该使用安全的方法将数据插入DOM。否则,您的代码存在XSS漏洞。

除了是安全问题之外,还有任何数据,例如“Foo Bar&lt; foo.bar@example.com>”不会像你(可能)那样呈现。

例如,您可以使用jQuery text()方法:

$('.testfield').append($('<p></p>').text(item));