返回正确格式化的json响应,以便在Laravel的highcharts中使用

时间:2014-05-28 14:09:55

标签: php json highcharts laravel-4

我的一个视图中有一个highcharts图表,我希望源数据是从返回json响应的路径加载的ajax。

所以我做了一条api路线:

Route::get('api/v1/data/{id}', function($id) {
    //Do some stuff and make a key value array with unix timestamp as key and float as value
    $data = Model::getData($id);    
    return $data;
});

我在我的视图中设置了高级图in the demo,但我的api路径是json源。我的图表呈现正常,但未绘制数据。控制台中没有错误。

当我查看api路由的输出时,json输出如下:

{
    "1317423600": 0,
    "1325289600": -0.17099521359192,
    "1333148400": 0.85133638321359,
    "1341010800": -0.94235521748172,
    "1348959600": 0.37334056741349,
    "1356912000": -0.15089107586321,
    "1364688000": 10.261663055542,
    "1372546800": 9.4860565407533,
    "1380495600": 6.2120398914028,
    "1388448000": 8.7469537358921,
    "1396220400": 8.7985530414845,
    "1398812400": 7.633928980909
}

演示json输出为like this

[
  [1147651200000,67.79],
  [1147737600000,64.98],
  [1147824000000,65.26],
  [1147910400000,63.18],
  [1147996800000,64.51],
  [1148256000000,63.38],
  [1148342400000,63.15]
]

我怀疑这就是数据无法渲染的原因。为什么输出的差异以及如何返回highcharts能够理解的响应。

2 个答案:

答案 0 :(得分:2)

看起来问题出在数据源(模型数据结果)上。

如果你准备了这样的数据,请检查一下:

$data[] = array(1317423600,0);
$data[] = array(1325289600, -0.17099521359192);
$data[] = array(1333148400, 0.85133638321359);

var_dump(json_encode($data));

它以您想要的格式生成json:

string '[[1317423600,0],[1325289600,-0.17099521359192],[1333148400,0.85133638321359]]' (length=77)

所以......为了解决这个问题,可以尝试这样的事情:

Route::get('api/v1/data/{id}', function($id)
{
    // Load DB Data
    $data = Model::getData($id);    

    // Parse Data
    $parsedData = array();
    foreach ($data as $k => $v)
        $parsedData[] = array($k, $v);

    // Finish
    return $parsedData;
});

答案 1 :(得分:1)

你的json应该是数组,或者你可以使用这个constircutoon {   x:1317423600,   y:-0.17099521359192 }

如果你使用json_encode()设置一个标志JSON_NUMERIC_CHECK来返回数字,而不是字符串。