从JSON数组中提取JSON对象

时间:2013-11-04 15:38:40

标签: javascript php jquery json highcharts

我已经冲浪了很长时间才能找到问题的答案,我不得不承认我很难过。我想我必须在这里找到一些非常简单的东西,但是现在我看不到树木了。

我正在尝试通过JSON加载高图,而JSON是由PHP数组创建的(原因是我从MySQL检索数据。)该系列正在加载正常,但我无法提取标题对于图表。我的理解是,代码需要像json.title.text ...但是这不起作用并且崩溃了脚本。任何帮助将不胜感激!

PHP数组如下(我已将虚拟变量放在简化中......):

    $arr = 
array (
    array (
        'title' => array (
            'text' => 'idiot'
        ),
        'data' => array (
            '2012-12-16; 0',
            '2012-12-16; 23'
        )
    ),
    array (
        'name' => 'Sacred cows',
        'data' => array (
            98.9914,
            99.5429
        )
    ),

);
echo json_encode($arr);

生成图表的JavaScript如下:

  function marketwidget(id){

var formData = "name="+ id + "&age=31";

$.ajax({
    url : "marketwidget.php",
    type: "POST",
    data: formData,
    success: function(data, textStatus, jqXHR)
    {
            var json = JSON.parse(data)

    var len = json.length
    i = 0;

    var options = {
   title: {
        text: []
        },
        xAxis: {
            categories: []
        },
        series: []
    }

        options.title.text = json.title.text

    for (i; i < len; i++) {
        if (i === 0) {
            var dat = json[i].data,
                lenJ = dat.length,
                j = 0,
                tmp;

            for (j; j < lenJ; j++) {
                tmp = dat[j].split(';');
                options.xAxis.categories.push(tmp[0]);
            }
        } else {
                options.series.push(json[i]);
        }
    }



    $('#container').highcharts('StockChart', options);

        },
    error: function(jqXHR, textStatus, errorThrown)
    {
    }
});

}

1 个答案:

答案 0 :(得分:3)

您正在阅读已解析的json的方式不正确。当我尝试json[i].title.text时,我能够访问该标题。

行中缺少数组索引:options.title.text = json.title.text。您可以尝试使用options.title.text = json[0].title.text

<script>
  var json = JSON.parse('[{"title":{"text":"idiot"},"data":["2012-12-16; 0","2012$


  for (var i = 0; i < json.length; i++) {
     document.write(json[i].title.text); 
  }
</script>