Я пытаюсь построить (с Flot ) круговую диаграмму с некоторыми данными
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"} ]
Проблема здесь в том, что мне нужна label
и data
без кавычек, я уже пробовал json_encode($data, JSON_NUMERIC_CHECK);
но удаляет только цитаты из чисел.
Мне нужен следующий формат:
var data = [ {label:"Crear Usuario",data:2}, ...
Во-первых, вы должны сгенерировать свой массив в 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);
Затем вы пропустите в Javascript JSON.parse (), чтобы сделать этот вывод в json-объекте:
<script> var data = '<?php echo $data; ?>'; var json = JSON.parse(data); console.log(json); console.log(json[0]); </script>
Результат 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
Похоже, что вам нужно, правильно?
Нет никакой разницы между цитируемыми и неуказанными ключами. Проблема заключается в цитировании вокруг фактических значений данных, поскольку Флот требует чисел, а не строк.
Функция json_encode решает, следует ли указывать на основе типа данных, которые вы ему даете. В этом случае, похоже, что все операции, которые вы выполняете для создания $ data, производят строковые значения вместо целых чисел. Вам нужно пересмотреть эти операции или явно указать PHP, чтобы интерпретировать их как числа, используя (int) или (float) casting, или функции intval / floatval.
Попробуйте что-то вроде этого:
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}"