从JSON文件提取数据,而无需下载[重复]

问题描述 投票:-1回答:1

我想运行一个脚本,该脚本接收一个JSON文件,对该脚本执行一个功能,以将选定的数据提取并格式化为一个变量($history),然后以HTML呈现。 JSON文件的格式为:

{123: {"epochBlocks": 0, "blocks": 0, ..."}, "updatedAt": "2323432" <- (key I want to skip), ...}

我的脚本代码:

let $history = "";
$.getJSON(
  "https://pooltool.s3-us-west-2.amazonaws.com/8e4d2a3/pools/bd1d1aafead6f652f76f5921b4ffdb429d7eb9d5322d0f4700f4f70f997c5a82/epochstats.json"
).done(function (data) {
  $.each(data.items, function (i, item) {
   // if (!data.items[i].includes(/[\w]/gi)) {     //if key does not contain letters, do below:

      $history = $history + data[item].epochBlocks + "/" + data[item].blocks + "\n";
   // }
  });
});
$("#history").text($history);

在脚本的末尾,我使用$("#history").text($history)使用<span id="history"></span>将其呈现为HTML。

使用以上代码,我没有输出。 JSON文件的URL是可下载的,所以我不确定脚本是否可以读取它?我还认为if语句可能有问题,因此我将其注释掉,但仍然没有输出。请指出问题-我的代码或JSON网址是否正在自动下载?谢谢。

javascript jquery json
1个回答
0
投票

$.getJSON请求是异步的,因此在完成请求之前将执行$("#history").text($history);,因此$history仍为""

您需要将$("#history").text($history);移到done回调中:

let $history = "";
$.getJSON(
  "https://pooltool.s3-us-west-2.amazonaws.com/8e4d2a3/pools/bd1d1aafead6f652f76f5921b4ffdb429d7eb9d5322d0f4700f4f70f997c5a82/epochstats.json"
).done(function (data) {
  $.each(data.items, function (i, item) {
   // if (!data.items[i].includes(/[\w]/gi)) {     //if key does not contain letters, do below:

      $history = $history + data[item].epochBlocks + "/" + data[item].blocks + "\n";
   // }
  });

  $("#history").text($history);
});

此外:$.each(data.items, function(i, item) {不会因为返回的数据采用以下格式:

{
  "122": {
    "epoch": 122,
    "epochSlots": null,
    "blocks": 0,
    "blockstake": 0,
    "stake": "1180516948",
    "value_for_stakers": 0,
    "value_taxed": 0
  },
  "123": {
    "epoch": 123,
    "epochSlots": null,
    "blocks": 0,
    "blockstake": 1180516948,
    "stake": "32307048146",
    "value_for_stakers": 0,
    "value_taxed": 0
  },
  "124": {
    "epoch": 124,
    "epochSlots": 0,
    "blocks": 0,
    "blockstake": 32307048146,
    "stake": "32311428152",
    "value_for_stakers": 0,
    "value_taxed": 0
  },
  "125": {
    "epoch": 125,
    "epochSlots": 0,
    "blocks": 0,
    "blockstake": 32311428152,
    "stake": "249343099181",
    "value_for_stakers": 0,
    "value_taxed": 0
  },
  "updatedAt": 1587151808
}

因此没有属性items。所以你需要写$.each(data, function (i, item) {

© www.soinside.com 2019 - 2024. All rights reserved.