尝试访问JSON数组中的密钥

时间:2018-10-09 11:14:16

标签: javascript jquery json chart.js

我正在尝试将Chart JS集成到项目中。我有一些通过Ajax使用以下命令返回的JSON数据:

$(".symptom-graph").each(function(){
    Tygh.$.ceAjax(
      'request',
      fn_url('symptom_tools.ajax_symptom_graph'),
      {
        data:{
          symptom_ids: $(this).data('symptom-id')
        },
        callback: function(data) {
          $(".symptom-graph").each(function(){
            if($(this).data('symptom-id') == data['symptom_ids'])
            {
              //TODO: load up graph stuff here
              $(this).html(data['graph_data']);
            }
          });
        }

      }
    );
  });

上面的代码返回以下JSON数据:

[{
    "x": "0",
    "y": "35"
}, {
    "x": "1",
    "y": "6"
}, {
    "x": "2",
    "y": "3"
}, {
    "x": "3",
    "y": "11"
}, {
    "x": "4",
    "y": "2"
}]

我试图访问数组中的每个项目,并拉出X或Y坐标,以使Chart JS脚本中的data: []数组具有每个项目。

我尝试了以下方法来访问Y或X坐标:

data['graph_data']['0']['y']

data['graph_data'][0]['y']

data['graph_data']['y']

data['graph_data'][0]

不知道我该如何遍历每个人。

任何指导/解决方案都会有所帮助,谢谢。

4 个答案:

答案 0 :(得分:1)

您还可以使用SELECT dt.* FROM ( SELECT pt.product_id, pt.description, pe.list_price - pe.min_price AS discount FROM PRODUCT AS pt JOIN PRICE AS pe ON pt.product_id = pe.product_id WHERE YEAR(pe.start_date) = 1989 ) AS dt ORDER BY dt.discount DESC LIMIT 1 函数,并使用$.each()

jQuery.parseJSON(YourJsonDataSet)
var xArray = [];

$(document).ready(function(){
var data = jQuery.parseJSON('[{"x": "0","y": "35"}, {"x": "1","y": "6"}, {"x": "2","y": "3"}, {"x":"3","y": "11"}, {"x": "4","y": "2"}]');

$.each(data,function(index, value){
    console.log("X - "+ value.x + " and Y - " +value.y)
   xArray.push(value.x);
});

alert(xArray.join())

})

答案 1 :(得分:0)

像这样使用JQuery:

$.each(data['graph_data'],function(index,data){
  console.log(data.x);
  console.log(data.y);
})

答案 2 :(得分:0)

您可以使用for之类的普通循环语句进行迭代,也可以在使用jQuery时使用$ .each。

var i;
for (i = 0; i < data.graph_data.length; i += 1) {
  // data.graph_data[i].x
  // data.graph_data[i].y
}

OR

$.each(data.graph_data, function(item) {
  // item.x
  // item.y
});

在支持EcmaScript 6的现代浏览器中,您可以使用Array.forEach作为@Mamun回答。要查看是否可以在浏览器中使用它,请访问https://caniuse.com/#search=foreach

答案 3 :(得分:0)

但是,您可以将该数组派生为对象,然后可以对其进行迭代。不知道这是否能回答您的问题。

var mythings = [{
  "x": "0",
  "y": "35"
}, {
  "x": "1",
  "y": "6"
}, {
  "x": "2",
  "y": "3"
}, {
  "x": "3",
  "y": "11"
}, {
  "x": "4",
  "y": "2"
}];

for (var i = 0; i < mythings.length; i++) {
  console.log("y:", mythings[i].y);
  console.log("x:", mythings[i]["x"]);
}
// access via keys
for (var n = 0; n < mythings.length; n++) {
  var keyNames = Object.keys(mythings[n]);
  console.log(keyNames);
  for (var name of keyNames) {
    console.log(name, mythings[n][name]);
    var value = mythings[n][name];
    console.log(value);
  }
}