构建和美化JSON对象

时间:2016-08-10 02:59:11

标签: jquery json object

我正在尝试使用ajax请求构建一个JSON对象,然后打印出所有美化的数据,以便于阅读。

这就是我所拥有的:

var url, data;
var shows = ["stranger things", "the night of"];
var json = {};

$.each(shows, function(i, show) {
  url = 'https://www.omdbapi.com/?t=' + show + '&type=series&plot=short'
  $.ajax(url, {
    complete: function(obj, status){
      data = $.parseJSON(obj.responseText);
      json.push(obj.responseText);
      console.log(data);
    }
  });  
});

var jsonPretty = JSON.stringify({shows: json}, null, '\t');
$("pre").text(jsonPretty);

https://jsfiddle.net/we1p7cqj/1/

问题出在json.push(obj.responseText)附近,但我无法找到解决办法。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

  • 你无法推入物体;你可以推进阵列。

    var json = [];
    
  • 您的.text(jsonPretty)即将推出。将其移至complete处理程序。

答案 1 :(得分:1)

首先,您的对象初始化错误: 应为var json = [];

此外,由于ajax请求默认是异步的,因此以下代码同时执行,此时json的值为空对象

var jsonPretty = JSON.stringify({shows: json}, null, '\t');
$("pre").text(jsonPretty);

因此,您可以在执行该代码之前使ajax请求同步或检查上一个节目:

if(showsLength == i + 1){
    var jsonPretty = JSON.stringify({shows: json}, null, '\t');
    $("pre").text(jsonPretty);
}

演示https://jsfiddle.net/we1p7cqj/4/

这是另一种方法(同步请求)

$.ajax(url, {
    async: false,
    complete: function(obj, status){
      data = $.parseJSON(obj.responseText);
      json.push(obj.responseText);
      console.log(data);
    }
  });

演示https://jsfiddle.net/we1p7cqj/5/

  啊,我现在明白了。谢谢你的帮助,山姆!有办法吗?   删除斜杠\“? - Jon 10分钟前

你看到这些被削减的原因是因为你要字符串化字符串而不是对象,所以要解决这个问题,你需要在推送时将它变为json对象

data = $.parseJSON(obj.responseText);
json.push(data);

DEMO: https://jsfiddle.net/we1p7cqj/7/