【问题标题】:Unable to call JSON data from Hacker News API无法从 Hacker News API 调用 JSON 数据
【发布时间】:2017-12-06 06:41:43
【问题描述】:

我正在尝试使用 Hacker News API,我可以调用该 API 并发出获取故事的请求。根据他们的 API 文档,源 URL 必须包含访问故事内容的 ID(必需),我在控制台中获得了正确的 URL,单击 URL 会给出适当的 JSON,但除此之外我无法使用/调用JSON 内容,如作者姓名、标题等。

JS CODE:

var records;
var userRecords;
var fileJson;
var startRequest = new XMLHttpRequest();
var sourceUrl = "https://hacker-news.firebaseio.com/v0/";
var sourceUrlAdd = "showstories.json";
var finalURL = sourceUrl + sourceUrlAdd;

startRequest.open("GET",finalURL);
startRequest.onload = function() {
    fileJson = JSON.parse(startRequest.responseText);
    for(var i = 0 ; i < fileJson.length; i++) {
        userRecords = sourceUrl + fileJson[i] + ".json";
    }
}
startRequest.send();

如何让它工作??

【问题讨论】:

  • 你试过显示responseText的内容吗?你知道它被编码为 JSON 吗?我只是在浏览器中打开了 URL,它不是 JSON,它的 HTML,所以你 JSON.parse 不会成功。
  • 页面以 JSON 格式文本打开,文档中的示例指的是 JSON 文件,无论哪种方式,我仍然无法反映从第一个请求中获取的 ID。
  • 好的,抱歉,现在我已将 showstories.json 附加到 URI,它确实打开了一个 JSON 提要,一个长整数数组。
  • 别担心,我正准备把链接发给你,现在看到问题了吗?
  • 我试过打开 'hacker-news.firebaseio.com/v0/15853345.json' 似乎无效,你确定这是文件的格式吗?

标签: javascript json hacker-news-api


【解决方案1】:

在看资料:GitHub

您在循环中的 URL 应修改为:

    for(var i = 0 ; i < fileJson.length; i++) {
       userRecords = sourceUrl + "/item/" + fileJson[i] + ".json";
    }

您的代码看起来并不完整,因为如果您想存储它们,循环只会覆盖每次迭代的 userRecords:

    userRecords = [];
    for(var i = 0 ; i < fileJson.length; i++) {
       userRecords.push(sourceUrl + "/item/" + fileJson[i] + ".json");
    }

上面将为您提供一个包含所有结果的数组。

例如,这是 userRecords 数组中第一项的内容:

    {"by":"ntrippar"
    ,"descendants":45
    ,"id":15853345
    ,"kids"[15858055,15854752,15856479,15854664,15858253,15856298,15854305,15855332,15858118,15857061,15854116]
    ,"score":159
    ,"time":1512494533
    ,"title":"Show HN: SeKey: An SSH Agent for OS X, Using Secure Enclave and TouchID, in Rust"
    ,"type":"story"
    ,"url":"https://github.com/ntrippar/sekey"}

如果你解析上面的内容,它将转化为一个对象。

【讨论】:

  • 这是我能够实现的,但问题是在那之后我无法访问其他详细信息,例如在运行循环后它返回一个我在控制台中执行此操作的 URL,以及何时我单击它生成 JSON 格式文件的 URL 之一,但说如果我只想知道所有发布用户的姓名,这是我无法过滤掉的。
  • 这是另一个问题,但基本上你需要再次做同样的事情,打开你在 userRecords 数组中的每个 JSON URL 并再次解析 JSON,然后你会得到对象内容。我将编辑我的答案以包含返回 JSON 的示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多