2013-11-04 190 views
0

我一直在網上衝浪了很長時間才找到我的問題的答案,我不得不承認我很難過。我想我必須在這裏錯過一些非常簡單的東西,但現在我看不到樹木。從JSON數組中抽取JSON對象

我試圖通過JSON加載高圖,而JSON是由PHP數組創建的(原因是我從MySQL檢索數據。)該系列加載正常,但我無法提取圖表的標題。我的理解是,它的代碼需要像json.title.text ...然而這不起作用並使腳本崩潰。任何幫助將不勝感激!

的PHP陣列是如下(I已經把虛擬變量來簡化...):

$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) 
    { 
    } 
}); 

} 
+0

[有沒有這樣的事情作爲一個 「JSON對象」(http://benalman.com/news/2010/03/theres-no-such-thing-as-a-json/)。爲什麼不使用jQuery的功能來創建查詢字符串?現在,您必須使用['encodeURIComponent'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent)正確編碼查詢字符串參數。你也可以使用'json'作爲'$ .post'的最後一個參數,所以你不必手動使用'JSON.parse',這可能不可用。 –

+0

您是否在響應數據上嘗試了'console.log'?從那裏開始結構往往很容易。 – David

+0

您的json結構不是以可輕鬆迭代的方式構建的。元數據應該與結果分開。這或者你不需要重複它。 –

回答

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> 
+0

感謝Kevin B和Rayhan對這個問題的回答 – Noobster