将返回的PHP数据转换为JavaScript对象
我有一个数据集,它需要与JavaScript变量的格式相同,如下所示:将返回的PHP数据转换为JavaScript对象,javascript,php,json,chart.js2,Javascript,Php,Json,Chart.js2,我有一个数据集,它需要与JavaScript变量的格式相同,如下所示: var theData = { datasets: [ { label: "My First dataset", backgroundColor: "rgba(179,181,198,0.2)", borderColor: "rgba(179,181,198,1)", data: [65, 59, 90,
var theData = {
datasets: [
{
label: "My First dataset",
backgroundColor: "rgba(179,181,198,0.2)",
borderColor: "rgba(179,181,198,1)",
data: [65, 59, 90, 81, 56, 55, 40]
},
{
label: "My Second dataset",
backgroundColor: "rgba(255,99,132,0.2)",
borderColor: "rgba(255,99,132,1)",
data: [28, 48, 40, 19, 96, 27, 100]
}
],
labels: ["Eating", "Drinking", "Sleeping", "Designing", "Coding", "Cycling", "Running"]
};
数据是用PHP构建的,但我不能像那样得到它
以下是我在PHP中的内容(示例数据,但填充方法相同):
这将使用json_encode()返回JavaScript代码>当我执行console.log(JSON.stringify(theData))
时,我得到以下信息:
{
"datasets":{
"1":{
"label":"Morning",
"borderColor":"rgba(125, 185, 232, .9)",
"backgroundColor":"rgba(125, 185, 232, .5)",
"borderWidth":1,
"data":[
"24",
0,
0,
"30",
"24",
"36",
"36"
]
},
"2":{
"label":"Afternoon",
"borderColor":"rgba(41, 137, 216, .9)",
"backgroundColor":"rgba(41, 137, 216, .5)",
"borderWidth":1,
"data":[
"24",
0,
0,
"24",
"24",
"30",
"36"
]
}
},
"labels":[
"Sun Aug 14",
"Mon Aug 15",
"Tue Aug 16",
"Wed Aug 17",
"Thu Aug 18",
"Fri Aug 19",
"Sat Aug 20"
]
}
这是针对Chart.js 2.3的。顶部的示例数据直接来自Chart.js示例数据。上面的JSON是我的结果。因为它们不相同,所以图表不起作用。我可以更改我的PHP,使其更像顶部的示例吗?让我们从顶部开始
数据
是一个对象
数据集
是对象的数组
标签
是一个数组
那么让我们开始建造这个
$data = array();
$data['datasets'] = array();
$data['datasets'][] = array("label" => "First Data Set",
"borderColor" => "rgba(30, 87, 153, .9)",
"backgroundColor" => "rgba(30, 87, 153, .5)"
);
$data['datasets'][] = array("label" => "Second Data Set",
"borderColor" => "rgba(41, 137, 216, .9)",
"backgroundColor" => "rgba(41, 137, 216, .9)"
);
$data['labels'] = array("Eating", "Drinking", "Sleeping", "Designing", "Coding", "Cycling", "Running");
echo json_encode($data);
如前所述,json\u encode
完成了构建阵列后的所有工作
{
"datasets": [
{
"label": "First Data Set",
"borderColor": "rgba(30, 87, 153, .9)",
"backgroundColor": "rgba(30, 87, 153, .5)"
},
{
"label": "Second Data Set",
"borderColor": "rgba(41, 137, 216, .9)",
"backgroundColor": "rgba(41, 137, 216, .9)"
}
],
"labels": [
"Eating",
"Drinking",
"Sleeping",
"Designing",
"Coding",
"Cycling",
"Running"
]
}
为什么在您的应用程序中不使用json_encode($data)PHP@KickingLettuce如果您以常规方式创建数组,则会有所帮助<代码>$data['dataset']=array()$数据['dataset'][]=数组('label'=>'First Data Set',…
请这样做。这是确保接收到的数据采用正确的JSON格式的唯一方法。@Rishabh抱歉,我误读了一些内容。我正在使用它。很抱歉在这个问题上来回重复。答案@Machavity是正确的。是的,它的工作,我没有看到数组中的数组,感谢您的澄清。这个外观就像一个很好的方法一样,让我测试一下。谢谢。我不明白为什么如果我将我的键设置为“$data['datasets'][1],而不是
$data['datasets'][],它会将它从一个对象数组更改为一个对象对象对象对象(至少基于JSON.stringify(theData)
打印的方式)@这是因为JSON必须如何工作。假设您设置键1
,但不设置键0
JSON\u encode
将通过将其转换为JSON对象来保留该键。请记住,JS没有像PHP那样的实际关联数组
{
"datasets": [
{
"label": "First Data Set",
"borderColor": "rgba(30, 87, 153, .9)",
"backgroundColor": "rgba(30, 87, 153, .5)"
},
{
"label": "Second Data Set",
"borderColor": "rgba(41, 137, 216, .9)",
"backgroundColor": "rgba(41, 137, 216, .9)"
}
],
"labels": [
"Eating",
"Drinking",
"Sleeping",
"Designing",
"Coding",
"Cycling",
"Running"
]
}