如何json_encode php数组,但没有引号的键

Dan*_*nny 18 javascript php arrays json flot

我试图绘制(使用Flot)带有一些数据的饼图

var data = <?php echo json_encode($data)?>
Run Code Online (Sandbox Code Playgroud)

我得到的结果是:

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"}
]
Run Code Online (Sandbox Code Playgroud)

这里的问题是我需要labeldata没有引号,我已经尝试json_encode($data, JSON_NUMERIC_CHECK);但只删除数字中的引号.

我需要以下格式:

var data = [
    {label:"Crear Usuario",data:2}, ...
Run Code Online (Sandbox Code Playgroud)

ale*_*ion 13

首先,你必须在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);
Run Code Online (Sandbox Code Playgroud)
  • 请注意,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>
Run Code Online (Sandbox Code Playgroud)
  • 请注意,var data = ...是SINGLE QUOTED,因此您将php中的echo作为String捕获

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 
Run Code Online (Sandbox Code Playgroud)

看起来你需要什么,对吗?


DNS*_*DNS 6

引用和不引用键之间没有区别.问题在于引用实际数据值,因为Flot需要数字而不是字符串.

json_encode函数根据您提供的数据类型决定是否引用.在这种情况下,看起来您正在执行的创建$ data的操作正在生成字符串值而不是整数.您需要重新检查这些操作,或明确告诉PHP将它们解释为数字,使用(int)或(float)转换或intval/floatval函数.