如何json_encode php数组,但键不带引号

2022-08-30 19:13:47

我正在尝试绘制(使用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"}
]

这里的问题是我需要和没有引号,我已经尝试过,但只从数字中删除引号。labeldatajson_encode($data, JSON_NUMERIC_CHECK);

以下格式是我需要的:

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

答案 1

首先,您必须在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 data = ...是单引号,所以你从php中捕获回声作为字符串

控制台.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 

看起来像你需要的,我说的对吗?


答案 2

带引号的键和未加引号的键之间没有区别。问题在于围绕实际数据值的报价,因为Flot需要数字而不是字符串。

json_encode函数根据您提供给它的数据类型决定是否报价。在本例中,您为创建$data而执行的任何操作看起来都会生成字符串值而不是整数。您需要重新检查这些操作,或者显式告诉PHP使用(int)或(float)转换或intval/floatval函数将它们解释为数字。