面向对象PHP的json_encode

时间:2013-03-08 10:02:44

标签: php javascript json

如何在面向对象的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比较。

3 个答案:

答案 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}} 。