2012-11-23 57 views
15

我想要繪製(與Flot)餅圖一些數據如何json_encode PHP數組,但不包括引號

var data = <?php echo json_encode($data)?> 

結果我從拿到鑰匙是這樣的:

var data = [ 
{"label":"Crear Usuario", "data":"2"}, 
{"label":"Impresoras", "data":"1"}, 
{"label":"Problema Correo", "data":"1"}, 
{"label":"Requisicion Equipo", "data":"1"}, 
{"label":"Sitio Web", "data":"1"} 
] 

這裏的問題是我需要labeldata沒有引號,我已經試過json_encode($data, JSON_NUMERIC_CHECK);但只刪除數字中的引號。

以下格式是什麼,我需要:

var data = [ 
    {label:"Crear Usuario",data:2}, ... 
+0

你想在php中進行這種轉換嗎? –

+0

那麼,我認爲在PHP中轉換會更好,是的。 – Danny

+2

爲什麼你想要它沒有報價?,有或沒有引號是等價的(雖然沒有引號它不是JSON)。 – Musa

回答

11

首先,你必須產生在PHP的陣列,因此數據的值是整數,而不是字符串:

我效仿你的陣列從json_encode(),我想它看起來像這樣(或應該):

$array = array(
       array("label" => "Crear Usuario", "data" => 2), 
       array("label" => "Impresoras",  "data" => 1), 
       array("label" => "Problema Correo", "data" => 1), 
       array("label" => "Requisicion Equipo", "data" => 1), 
       array("label" => "Sitio Web", "data" => 1) 
      ); 

    $data = json_encode($array); 
  • 注意,2名1的是不帶引號的,所以這種方式,他們是整數,這是非常重要的。

然後你在Javascript是想念的JSON.parse()來實際上使該輸出成JSON對象:

<script> 
    var data = '<?php echo $data; ?>'; 
    var json = JSON.parse(data); 
    console.log(json); 
    console.log(json[0]); 
</script> 
  • 注意VAR數據=是單引號,讓你趕上從PHP回聲作爲字符串

的執行console.log()的這個輸出對我來說:

[Object, Object, Object, Object, Object] // First console.log(): one object with the 5 Objects. 
Object {label: "Crear Usuario", data: 2} // secons console log (json[0]) with the first object 

看起來你需要什麼,對嗎?

+0

+1 :)非常感謝:P –

+0

爲我工作了一個魅力,謝謝! – MrNorm

+0

只有'var data = <?php echo $ data; ?>;(刪除單引號)會做同樣的事情 - 不需要在客戶端解析 –

3

嘗試是這樣的:

function buildBrokenJson(array $data) { 

    $result = '{'; 

    $separator = ''; 
    foreach($data as $key=>$val) { 
     $result .= $separator . $key . ':'; 

     if(is_int($val)) { 
     $result .= $val; 
     } elseif(is_string($val)) { 
     $result .= '"' . str_replace('"', '\"', $val) . '"'; 
     } elseif(is_bool($val)) { 
     $result .= $val ? 'true' : 'false'; 
     } else { 
     $result .= $val; 
     } 

     $separator = ', '; 
    } 

    $result .= '}'; 

    return $result; 
} 

,當運行

$a = array("string"=>'Crear "Usuario', 'foo'=>':', "int"=>2, "bool"=>false); 
var_dump(buildBrokenJson($a)); 

它給:

string(54) "{string:"Crear \"Usuario", foo:":", int:2, bool:false}" 
+0

我希望「標籤」一詞不帶引號,也要「數據」。 – Danny

+0

這些是字符串的類型。將被引用。你可以寫自己的json_encode - 不應該很難(我現在在電話上) –

+0

看到編輯答案 –

4

引用鍵和未引用鍵之間沒有區別。問題在於引用實際數據值,因爲Flot需要數字,而不是字符串。

json_encode函數根據您提供的數據類型決定是否引用。在這種情況下,它看起來像你正在執行的任何操作來創建$ data正在生成字符串值而不是整數。您需要重新檢查這些操作,或者明確告訴PHP將它們解釋爲數字,使用(int)或(float)轉換或intval/floatval函數。