【问题标题】:cannot access json github api response correctly无法正确访问 json github api 响应
【发布时间】:2015-06-28 21:57:53
【问题描述】:

我正在尝试从 github 职位发布 API 访问 JSON 响应数据。这是 JSON 响应结构:

 [
    {"id":"1", "title":"gameon"}, 
    {"id":"2", "title":"hardlife"},
    {"id":"3", "title":"lotsofbugs"}
 ]

我一直在疯狂寻找访问 idtitle 的解决方案。我尝试了几种方法,例如(假设响应存储在名为 jsonResponse 的 JS 变量中):

jsonResponse[0][1]["title"]

甚至像

jsonResponse[1]["title"]

但一切似乎都不起作用。我想访问响应的每个部分的每个 idtitle,但我找不到方法。如果我可以访问它,我会在测试它时提醒一切。每当我尝试访问 JSON 响应数据时,它所说的一切都是未定义的。有人可以帮帮我吗?

【问题讨论】:

  • jsonResponse[0].title, jsonResponse[0].id, jsonResponse[1]["title"] 也可以。
  • 正如@dfsq 所说,您的第二个示例(jsonResponse[1]['title'])应该可以正常工作。您是否检查过控制台以确保您的代码中没有错误,并且请求已成功完成?
  • 是的@Rory McCrossan,你的回答应该不错,但是当我检查控制台时,它说 AJAX 请求已成功执行,因为它已经返回了响应。不过这有点奇怪

标签: javascript jquery json api github-api


【解决方案1】:

如果您想依次访问每个,可以使用forEach 函数。

var response =  [
     {"id":"1", "title":"gameon"}, 
     {"id":"2", "title":"hardlife"},
     {"id":"3", "title":"lotsofbugs"}
];

response.forEach(function(obj) {   
   var id = obj.id;
   var title = obj.title;
   // Do things with the data here 
});

【讨论】:

  • 这给了我一个错误,例如:Uncaught TypeError: response.forEach is not a function
  • 您是否按照我的方式复制代码?它应该可以工作,forEach 是 Array Prototype 上的原生函数。
  • 是的@ChadF,我完全按照您编写的方式复制了代码。我查看了谷歌浏览器调试工具控制台,它给了我Uncaught TypeError: response.forEach is not a function
  • 如果您在获得此代码时正确运行它,它可能仍会被字符串化。试试var respObj = JSON.parse(response); 否则我不知道你到底出了什么问题。在响应上运行 typeof 并确保它是一个数组。
  • 我已经想通了。 Notorious Pet() 是正确的,通过使用 jquery 的 $.parseJSON() 函数,我能够将 JSON 转换为 javascript 可读对象,并且您的代码也可以循环遍历数组。非常感谢!
【解决方案2】:

如果您正在处理 json 数据,则您正在处理一个 javascript 对象。如果可以的话,你真的应该只使用 $.parseJSON() ,但如果不能,你应该能够通过使用 myObj.idmyObj.title. 或者可能是 myObj[0].id , @987654328 来访问对象@etc...(如果您需要更深入,请尝试 javascript 对象引用)

刚刚为您获取了一些更新的代码和JSFIDDLE...这是一些用于测试和演示 stringify 和 parseJSON 函数的代码,因此您可以使用它。如您所见,它正在获取正确的数据并发出警报。 :)

(function($){ 
    $(function(){  //document.ready

    var myResponseData = [
        {"id":"1", "title":"gameon"}, 
        {"id":"2", "title":"hardlife"},
        {"id":"3", "title":"lotsofbugs"}
     ];
        myResponseData = JSON.stringify(myResponseData);
        console.dir(myResponseData);
        var myObj = $.parseJSON(myResponseData);
        console.dir(myObj);
        alert(myObj[0].title);    
    });     
})(jQuery);

正如另一个答案所暗示的,您可以使用 for each 循环来迭代内容。我会定义console.dir() 的响应,并确保在扯掉头发之前正确地取回数据。 :) 使用 chrome 开发工具,您可以通过将此行放入代码中来查看响应的内容...

console.dir(myResponseData);

您还可以通过单击 chrome 开发工具中的“网络”,然后单击 ajax 脚本的文件名来查看来回数据。它应该默认为“响应”,但如果不是,请单击它。

如果您有任何问题,请告诉我。

【讨论】:

  • 嗨@Notorious Pet(),感谢您的建议。我甚至在发布问题之前就使用 chrome 调试工具找到了它。我真的很难找到解决方案,因为我知道它应该已经工作了。我认为不需要 $parse.JSON,因为 API 调用已经将它作为 JSON 响应返回了
  • 如果你想在你的脚本中使用 JSON,如果你使用 jquery,你应该使用 parseJSON。 api.jquery.com/jquery.parsejson 它将 JSON 转换为 javascript 可读对象,而不是相反。
  • 你是对的@Notorious Pet(),使用 jquery 的 $.parseJSON 帮助将 JSON 转换为 javascript 可读对象。但是,我的问题是,默认情况下 JSON 不是已经是 javascript 可读对象了吗?
  • JSON 只是一个以某种方式格式化的字符串。我已经使用 JSFIDDLE 链接更新了我的答案,如果您愿意,可以随意使用。很高兴我能帮忙.. :)
猜你喜欢
  • 1970-01-01
  • 2018-02-23
  • 1970-01-01
  • 1970-01-01
  • 2021-09-24
  • 2014-09-24
  • 2017-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多