【问题标题】:getJSON data add array item to variablegetJSON数据将数组项添加到变量
【发布时间】:2015-03-17 17:45:22
【问题描述】:

我正在使用此脚本将 JSON 数据从文件检索到我的页面。

$.getJSON('json/data.json', function(data) {
  $('#getJSON-results').html(JSON.stringify(data)); 
});
<div id="getJSON-results"></div>

现在它只是将 JSON 文件中的所有数据显示为页面上的字符串。 我将如何从我的 JSON 文件中获取数据并将每个数组放入一个变量中?我在 JSON 文件中的数据如下所示:

[{"target": "summarize(first, \"1d\", \"sum\")", "datapoints": [[38.393148148148143, 1423958400], [90.800555555555633, 1424044800], [159.06037037037032, 1424131200], [245.5933333333335, 1424217600], [126.94796296296299, 1424304000], [120.37111111111113, 1424390400], [103.04148148148151, 1424476800], [99.273796296296368, 1424563200], [89.38203703703708, 1424649600], [92.970462962963012, 1424736000], [105.62666666666664, 1424822400], [110.33962962962967, 1424908800], [118.54981481481482, 1424995200], [100.08018518518523, 1425081600], [92.52277777777779, 1425168000], [98.647619047618974, 1425254400], [94.585000000000008, 1425340800], [85.568796296296284, 1425427200], [157.82222222222222, 1425513600], [109.7596296296296, 1425600000], [112.53324074074077, 1425686400], [89.392592592592649, 1425772800], [97.253518518518518, 1425859200], [73.424629629629635, 1425945600], [92.377592592592578, 1426032000], [76.117870370370397, 1426118400], [77.83953703703699, 1426204800], [66.643518518518533, 1426291200], [63.748055555555531, 1426377600], [137.30018518518517, 1426464000], [53.480648148148134, 1426550400]]},
{"target": "summarize(second, \"1d\", \"sum\")", "datapoints": [[2.7291600529100535, 1423958400], [5.7797089947089892, 1424044800], [3.4261574074074059, 1424131200], [5.0516335978835958, 1424217600], [6.2272420634920582, 1424304000], [11.752605820105822, 1424390400], [7.8688624338624269, 1424476800], [5.7305555555555525, 1424563200], [5.2784391534391499, 1424649600], [6.4652380952380897, 1424736000], [4.7690277777777741, 1424822400], [4.1451587301587258, 1424908800], [8.4178902116402039, 1424995200], [4.7948611111111061, 1425081600], [4.8153835978835939, 1425168000], [5.3873148148148111, 1425254400], [7.2819378306878262, 1425340800], [5.2084391534391488, 1425427200], [8.098492063492051, 1425513600], [5.6563822751322697, 1425600000], [5.3091468253968195, 1425686400], [4.7850396825396793, 1425772800], [3.8716931216931179, 1425859200], [3.1934325396825369, 1425945600], [3.2083531746031722, 1426032000], [3.3434391534391512, 1426118400], [3.6162235449735438, 1426204800], [3.2094179894179891, 1426291200], [2.3699537037037026, 1426377600], [4.3973544973544945, 1426464000], [2.1901388888888893, 1426550400]]}, 
{"target": "summarize(third, \"1d\", \"sum\")", "datapoints": [[5.3710185185185182, 1423958400], [11.25367724867724, 1424044800], [8.2990079365079268, 1424131200], [8.710694444444437, 1424217600], [9.6381216931216898, 1424304000], [9.3845105820105807, 1424390400], [9.7305820105820047, 1424476800], [8.6268055555555474, 1424563200], [10.589166666666673, 1424649600], [10.235462962962957, 1424736000], [10.455892857142853, 1424822400], [14.282407407407405, 1424908800], [17.774404761904758, 1424995200], [18.154120370370364, 1425081600], [16.249543650793651, 1425168000], [15.29764550264551, 1425254400], [16.267671957671972, 1425340800], [20.121488095238096, 1425427200], [27.007685185185196, 1425513600], [17.577962962962971, 1425600000], [17.020873015873018, 1425686400], [14.627685185185191, 1425772800], [15.824821428571433, 1425859200], [11.837579365079364, 1425945600], [13.292539682539683, 1426032000], [12.064074074074073, 1426118400], [12.279457671957676, 1426204800], [9.3799074074073978, 1426291200], [7.8777314814814732, 1426377600], [13.161825396825407, 1426464000], [7.2587499999999956, 1426550400]]}]

我是使用 JSON 的新手,如果我对我所采用的方法提出任何建议,我将不胜感激。

我现在如何使这些数据在 getJSON 之外可访问?

    $.getJSON('json/data.json', function(data) {
      yourData = data;
      makeMeGlobal = yourData[0]; 



    });
     console.log(makeMeGlobal.datapoints);

【问题讨论】:

  • 它已经在一个数组中。 $.getJSON 为您解析。但是然后你stringify它又回到了一个字符串!

标签: javascript jquery json html


【解决方案1】:

将您的函数更改为以下将导致您可以正常引用的对象:

$.getJSON('json/data.json', function(data) {
  yourData = data;
});

然后您可以像这样获得第一组数据点:

yourData.datapoints[0]

【讨论】:

  • 我根据您的回答在我的问题中添加了一些内容,这确实有帮助,但我怎样才能使这些数据全球化?
  • 现代的、实用的方式是通过 Promise 传递数据,并将其传递到链上。我会通过在全局范围内声明变量,并在你的函数中将值分配给该变量来做到这一点。
【解决方案2】:

应该是:

 data.forEach(function (obj) {
     // obj now has each JSON object in this array
     var test = obj.target;
 }

当您从 AJAX 获得 JSON 时,它已经准备好在浏览器中使用。这是在 XML 上使用 JSON 的好处之一。

【讨论】:

    【解决方案3】:

    它已经是一个数组了,因为原来的 JSON 字符串是被 jQuery 解析的。如果您使用stringify,您将获得一个string,其中包含表示数组的JSON(对您的目的没有用,因为它与服务器返回的字符串相同)。

    例如:

    $.getJSON('json/data.json', function(data) {
        // Here, data is already an array.
        var data_length = data.length;
        for (var i = 0; i < data_length; i++) {
            var obj = data[i]; // Here we have an object from the array
            alert("I have an object which target is " + obj.target);
        }
    });
    

    【讨论】:

      【解决方案4】:

      您需要遍历 json 以检索您需要的值并附加 html.More infor @https://stackoverflow.com/a/18238241/909535 这样的东西

      `$.getJSON('json/data.json', function(data){
       data.forEach(
                          function(val, index, array) {
                              //val.target will have target attribute's value
                              //val.datapoints is a array which you can iterate   
      
                          }
                      );
                  }
          );`
      

      【讨论】:

        猜你喜欢
        • 2021-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-21
        • 2018-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多