获取JSON:使用jQuery解析数组

4

我已成功使简化数组工作,请见下方。

关于解析复杂数组的进一步跟进,请见此处


TLDR: 使用Jquery - getJSON想要从数组中获取每个标题并将其插入到一个div中,而不知道div中的内容。 Edit: 数据来自一款软件,每隔几秒钟就会输出新数据的JSON字符串,因此我需要在下面的示例中提取“d”中的数据数组。因此,我应该获取每个标题和“Title”和“034324324”等。 Edit2 更新代码以与我的代码完全匹配。
我有一个JSON数组,比如说:
{
  "Days": ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
}

我希望将每个“标题”解析并插入到一个div中。

尝试的思路如下:

function getdata() {
31 $.ajaxSetup ({ cache: false}); //<!-- Stops IE from caching data //-->
32 
33 $.getJSON(testurl, function(data) {
34 $.each(data.days, function(i,item){
35 $('#testfield').append('<p>' + item + '</p>');
36
37 });
38 }); 

无济于事。

我在其他地方使用Getjson,但是在我知道我正在进行的请求时。

例如:

$('#name').html(data.Projectname);

这一切都运行得非常完美,但在这种情况下,我需要从数组中获取细节,而不知道数组中的内容。我相信我错过了或做错了什么简单的事情 ^^。

我目前正在使用的JSON如下:

{"Projectname":"ertyofhj","Projectid":"aqwertyuqw","Projecttitle":"ertyofhj"}

数组只是一种在不知道其内部内容的情况下查找数据的方式。
我会持续添加更多内容。 调试Firebug或IE的调试器(啊)会停在此处。
33 $.getJSON(testurl, function(data) {

那么

38 });

完全跳过
34 $.each(data.days, function(i,item){

-GET请求正常触发并返回正确的JSON字符串。但现在它无法填充$.each,甚至无法特定地请求某个字符串。
关于上述问题,Firebug也告诉我它没有格式化为JSON?

将原始JSON字符串更改为更简单的内容。(一周的天数)像这样的天数会加载。所以我正在取得进展。但我需要能够调用更复杂的数组。例如(使用天数),每天都有一个特定的时间,我需要显示出来,而且每天应该在新行上尝试添加“+ '< br />'”,但那也不起作用。以数组形式显示:
{
  "Days": ["Sunday": "10.00", "Monday": "12.00", "Tuesday": "09.00", "Wednesday": "10.00", "Thursday": "02.00", "Friday": "05.00", "Saturday": "08.00"]
}

我需要提取所有的日期和时间(Dayname & time),这与编程有关,保留HTML格式,不要解释。

甚至更难的是,如何在没有数组/完全不知道其内部内容的情况下从JSON字符串中获取所有细节(如果可能的话:P) - Sphvn
3个回答

2
$.getJSON(url,
    function(data){
      $.each(data.items, function(i,item){
      $('#testfield').html('<p>' + item.d.title + '</p>');
      });
    });

在这段代码中,你将不断地替换ID为“testfield”的项目的HTML值,你可能想尝试使用jQuery.append按照你上面指定的方式添加所有条目。请参考jQuery.append
$.getJSON(url,
    function(data){
      $.each(data.items, function(i,item){
      $('#testfield').append('<p>' + item.d.title + '</p>');
      });
    });

那很有道理。但可悲的是,对我来说仍然不起作用 :P - Sphvn
你的数据格式错误。在你上面提到的日期示例中(星期几后跟一个值),你错误地指定了元素。例如,你需要为每个元素添加 { "Sunday" : "10.00" } 等。请参见下面的附加答案。 - Dave G

1

希望这个例子能为您指明正确的方向


<html>
<head>
  <title>Stackoverflow</title>
  // ** POINT THIS TO A VALID jquery.js LOCATION
  <script src="jquery.js" type="text/javascript"></script>
  <script>
    var days = [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ];
    // *****************************************************
    // This is your data from getJSON if correctly formatted
    var data = '{"Days":[ {"Sunday":"10.00"}, {"Monday":"12.00"}, {"Tuesday":"09.00"}, {"Wednesday":"10.00"}, {"Thursday":"02.00"}, {"Friday":"05.00"}, {"Saturday":"08.00"}]}';
    runUpdate = function() {
      // *******************************************************
      // Clear the div of all data by replacing it
      $('#testfield').replaceWith('<div id="testfield"></div>');
      var dataObject= $.parseJSON( data );
      $.each( dataObject.Days, function (index, value) {
        // ********************************************
        // Append new elements to the newly created div
        $('#testfield').append("<p>"+days[index]+": "+value[ days[index] ]+"</p>");
      });
    };

    runReset = function() {
      $('#testfield').replaceWith('<div id="testfield">This is original text.</div>');
    };
  </script>
</head>
<body>
  <div id="testfield">
    This is original text.
  </div>
  <div>
    <input type="button" value="Run Update" onclick="runUpdate();" />
    <input type="button" value="Reset" onclick="runReset();" />
  </div>
</body>
</html>

1

您的JSON数据存在错误:在最后三个项目中,您没有在“d”后使用冒号。这是您的应用程序正在使用的真实数据示例,还是演示问题的示例数据?


1
这是在循环中使用的局部变量。 - Darin Dimitrov
这只是一个示例,旨在演示我遇到的问题,之前我已经使用Flickr设置了一个工作示例。这个示例比Flickr的JSON字符串要简化得多。但是,确实应该使用冒号。 - Sphvn
在我尝试使用的“测试示例”中添加了冒号。 - Sphvn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接