2013-09-27 244 views
1

我正在尝试创建一个与FLOT图表配合使用的数据数组。我使用这个笨代码来生成数组:从JSON中删除引号并用方括号替换大括号

function ajaxmuniChart1c(){ 
$muni = $this->input->POST('muni'); 
$q = $this->db->query("SELECT SaleYear AS Y, NewSaleType AS T, count(*) AS C, format((sum(SalePrice)/sum(Quantity1)),0) AS R FROM tblsales WHERE tblsales.SaleYear > 2007 AND tblsales.Quantity1 > 2000 AND (tblsales.NewSaleType = 'Industrial') AND tblsales.Municipality = '".$muni."' GROUP BY T,Y ORDER BY T,Y"); 
$json_Array = array(); 
foreach ($q->result_array() as $row){ 
    $JsonArray[] = array(floatval($row['Y']) => floatval($row['R'])); 
} 
$labeledArray = array( 
    "label" => "Average Sale Price per SF", 
    "data" => $JsonArray 
); 
echo json_encode($labeledArray); 
exit; 
} 

这段代码的问题是,所产生的JSON对象不能绘制因为“价值”其实都是字符串。这是有问题的JSON输出:

{"label":"Average Price","data":[{"2008":96},{"2009":74},{"2010":73},{"2011":96},{"2012":124},{"2013":104}]} 

有三个问题与此JSON:

  1. 需要方括号,而不是大括号;和
  2. 需要使用逗号分隔键 - >值对而不是全冒号;和
  3. 行情需要被去除,使得字符串“2008”变成值2008

这里是JSON输出需求的方式进行格式化:

["label":"Average Price","data":[[2008,96],[2009,74],[2010,73],[2011,96],[2012,124],[2013,104]]] 

什么是最好的清理这个JSON对象的方法?我应该使用CodeIgniter代码在服务器端执行它吗?或者,我应该在JavaScript的客户端上完成JSON对象之后呢?谢谢。

回答

2

由于您生成该JSON,您可以更改其来源。

$JsonArray[] = array(floatval($row['Y']) => floatval($row['R'])); 

- >

$JsonArray[] = array(floatval($row['Y']), floatval($row['R'])); 

(这改变像{"2008": 80}阵列[2008, 80]

+0

真棒。感谢Brian。你让我的周末! – DanielAttard