Javascript 将json#U编码传递给chart.js won';行不通

Javascript 将json#U编码传递给chart.js won';行不通,javascript,php,json,chart.js,Javascript,Php,Json,Chart.js,我正在尝试使用chart.js(最新版本)创建一个饼图 我已经制作了一个数组,我想将其作为图表的数据变量输出 这就是PHP代码: <?php if($os != null) { $tiposOs = array('Orçamento'=> "#5DC1E3", 'Aberto'=> "#07D7F7", 'Faturado' => "#07F7CB",

我正在尝试使用chart.js(最新版本)创建一个饼图

我已经制作了一个数组,我想将其作为图表的数据变量输出

这就是PHP代码:

<?php if($os != null) {
   $tiposOs = array('Orçamento'=> "#5DC1E3",
                    'Aberto'=> "#07D7F7",
                    'Faturado' => "#07F7CB",
                    'Em Andamento' => "#FFD724",
                    'Finalizado' => "#30C70A",
                    'Cancelado' => "#FF2B2B");
    $chartOsData = array();
    $chartOsData['type'] = 'pie';
    $chartOsData['data'] = array();
    $chartOsData['options'] = array('responsive'=>true);

    foreach ($os as $o)
    {
        $chartOsData['data']['labels'][] = $o->status;
        $chartOsData['data']['datasets']['data'][] = (int)$o->total;
        $chartOsData['data']['datasets']['backgroundColor'][] = $tiposOs[$o->status];
    }
?>
这是数据变量的输入类型:

var data = {
    labels: [
        "Red",
        "Blue",
        "Yellow"
    ],
    datasets: [
        {
            data: [300, 50, 100],
            backgroundColor: [
                "#FF6384",
                "#36A2EB",
                "#FFCE56"
            ],
            hoverBackgroundColor: [
                "#FF6384",
                "#36A2EB",
                "#FFCE56"
            ]
        }]
};
这就是我得到的:

$(document).ready(function() {
    var osChartc = document.getElementById('osChart').getContext('2d');
    var osChart = new Chart(osChartc,{
        "type": "pie",
        "data": {
            "labels": ["Aberto", "Em Andamento"],
            "datasets": {
                "data": [1, 1],
                "backgroundColor": ["#07D7F7", "#FFD724"]
            }
        },
        "options": {
            "responsive": true
        }
    });
});
我相信数组格式是正确的,除了键周围有引号,并且数据集上没有方括号

图表未生成,我遇到以下错误:

未捕获的TypeError:无法读取未定义的属性“length”

可以做些什么

$chartOsData['data']['datasets']['data'][] = (int)$o->total;
$chartOsData['data']['datasets']['backgroundColor'][] = $tiposOs[$o->status];
在这里,您正在构建
数据集
,作为带有键
数据
背景色
的对象

datasets: [
    {
        data: [300, 50, 100],
        backgroundColor: [...],
    }
]
这里显示的是
数据集
应该是一个数组,其中包含一个具有这些键的对象

修复方法很简单:将
数据集
设置为一个数组:

$chartOsData['data']['datasets'][0]['data'][] = (int)$o->total;
$chartOsData['data']['datasets'][0]['backgroundColor'][] = $tiposOs[$o->status];
                                ^^^
在这里,您正在构建
数据集
,作为带有键
数据
背景色
的对象

datasets: [
    {
        data: [300, 50, 100],
        backgroundColor: [...],
    }
]
这里显示的是
数据集
应该是一个数组,其中包含一个具有这些键的对象

修复方法很简单:将
数据集
设置为一个数组:

$chartOsData['data']['datasets'][0]['data'][] = (int)$o->total;
$chartOsData['data']['datasets'][0]['backgroundColor'][] = $tiposOs[$o->status];
                                ^^^

hoverBackgroundColor
不是强制性的键上的引号是不相关的。数据集上没有方括号意味着您的
数据集
是一个对象,而不是您可能期望的对象数组。这意味着您没有按照您希望/需要的方式构建数据。JSON不是您的问题。如何将数据集作为对象输出?您将它们作为一个对象输出。如果您希望使用“方括号”,则需要构造一个数组。您对
数据集
的具体期望是什么?啊,对不起,您的一个块显示了期望的数据…
hoverBackgroundColor
不是义务键上的引号是不相关的。数据集上没有方括号意味着您的
数据集
是一个对象,而不是您可能期望的对象数组。这意味着您没有按照您希望/需要的方式构建数据。JSON不是您的问题。如何将数据集作为对象输出?您将它们作为一个对象输出。如果您希望使用“方括号”,则需要构造一个数组。您对
数据集的具体期望是什么?啊,对不起,您的一个块显示了期望的数据。。。