-2

如何使用json_encode面向对象的 PHP 对以下 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比较。

4

3 回答 3

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 文档

于 2013-03-08T10:06:36.460 回答
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]]
        }
    }
}
于 2013-03-08T10:20:20.967 回答
0

数组在 JSON 中只能是数字,因此关联数组的编码方式与对象相同。你只需要json_encode像往常一样打电话:

json_encode($array)

在 PHP 中解码 JSON 时,如果您需要关联数组而不是对象,请将 true 作为第二个参数传入:

json_decode($json,true);

如果你想要一个对象,你可以false作为第二个参数传入,或者不使用它作为参数false的默认值。associativejson_decode

于 2013-03-08T10:10:23.900 回答