如何在面向对象的PHP中使用json_encode
编写以下json数据。
var datasets = {
"usa": {
label: "USA",
data: [[1988, 483994], [1989, 479060], [1990, 457648], [1991, 401949], [1992, 424705], [1993, 402375], [1994, 377867], [1995, 357382], [1996, 337946], [1997, 336185], [1998, 328611], [1999, 329421], [2000, 342172], [2001, 344932], [2002, 387303], [2003, 440813], [2004, 480451], [2005, 504638], [2006, 528692]]
}
// skipped other data
}
我是面向对象的PHP和json编码的新手,所以我非常感谢你的帮助。
PS。如果可能的话,请发布脚本的程序编码风格。我只想和OO比较。
答案 0 :(得分:4)
您不需要面向对象来执行此操作:
$array = array("usa" => array(
"label"=>"USA",
"data" => array(
array("1988","483994"),
array("1989","457645") //etc
)
)
);
echo json_encode($array);
同样可以使用json字符串回复:
$string = '{
"usa": {
label: "USA",
data: [[1988, 483994], [1989, 479060], [1990, 457648], [1991, 401949], [1992, 424705], [1993, 402375], [1994, 377867], [1995, 357382], [1996, 337946], [1997, 336185], [1998, 328611], [1999, 329421], [2000, 342172], [2001, 344932], [2002, 387303], [2003, 440813], [2004, 480451], [2005, 504638], [2006, 528692]]
}
// skipped other data
}';
print_r(json_decode($string, true)); //Will show you the previous array
请参阅php docs。
答案 1 :(得分:3)
虽然其他人说您不需要面向对象,但显然您希望尽可能以面向对象的方式进行。而且我认为这是一个好主意,面向对象比大多数PHP程序所包含的程序错误要好得多。
试试这个。
<?php
class DataSet {
var $label;
var $data;
public function __construct($label, $data) {
$this->label = $label;
$this->data = $data;
}
}
class CountryData {
var $datasets;
public function __construct() {
$this->datasets = array();
}
public function add($label, DataSet $dataset)
{
$this->datasets[$label] = $dataset;
}
}
$usa = new DataSet('USA', array(
array(1988, 483994),
array(1989, 479060)
));
$sweden = new DataSet('Sweden', array(
array(1981, 1000),
array(1982, 2000)
));
$result = new CountryData();
$result->add('usa', $usa);
$result->add('sweden', $sweden);
echo json_encode($result);
使用这种方法,您可以将日志记录和其他功能附加到add方法等,面向对象的方法可以更轻松地使用行业标准模式。
以上代码将输出
{
"datasets":{
"usa":{
"label":"USA",
"data":[[1988,483994],[1989,479060]]
},
"sweden":{
"label":"Sweden",
"data":[[1981,1000],[1982,2000]]
}
}
}
答案 2 :(得分:0)
数组只能是JSON中的数字,因此关联数组的编码方式与对象相同。您只需正常呼叫json_encode
:
json_encode($array)
如果你想要一个关联数组而不是一个对象,在PHP中解码JSON时,将true作为第二个参数传递:
json_decode($json,true);
如果您想要一个可以传递false
作为第二个参数的对象,或者不将其用作false
,则associative
中的json_decode
参数的默认值为{{1}} 。