2013-03-08 105 views
-1

如何在面向对象的PHP中使用json_encode编码以下json数据。面向对象的json_encode PHP

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

的代码,我希望是什么,这已经是JSON编码。尽管json_encode()和json_decode()是相同的函数。 – 2013-03-08 10:04:50

+0

他想让json编码一个对象来获得这个json输出。你不了解Saurabh的问题。 – oldwizard 2013-03-08 10:23:52

+0

请说明你的意思。你想从这个数据构建适当的对象实例/以包含这些数据的对象实例的格式创建这种格式的数据?或者你只是想在某个OOP上下文中使用'json_encode'?现在的问题毫无意义/太模糊。 – deceze 2013-03-08 10:35:20

回答

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

+0

我想它应该是'print_r(json_decode($ string,true));'无论如何+1 – 2013-03-08 10:16:22

+0

谢谢,补充说,检索assoc数组 – soyuka 2013-03-08 10:18:01

+0

哦..似乎程序风格并不糟糕..谢谢〜 – ralpu 2013-03-08 11:04:20

0

数组只能用JSON数字化,所以关联数组的编码方式与对象相同。你只需要调用json_encode正常:

json_encode($array) 

当PHP解码JSON如果你想要一个关联数组,而不是一个对象,传递true作为第二个参数:

json_decode($json,true); 

如果你想您可以通过false作为第二个参数传递的对象,或者不使用它作为falsejson_decodeassociative参数的默认值。

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); 

使用这种方法,您可以附加日志和其他功能的添加方法等,在面向对象的方法增加了更方便地使用工业标准模式的可能性。

这是上面会输出

{ 
    "datasets":{ 
     "usa":{ 
      "label":"USA", 
      "data":[[1988,483994],[1989,479060]] 
     }, 
     "sweden":{ 
      "label":"Sweden", 
      "data":[[1981,1000],[1982,2000]] 
     } 
    } 
} 
+0

你的回答解决了我的代码需要OO实现的问题。这正是我所期待的,考虑到OOP。但我决定在程序中使用程序风格,并且@soyuka回答很好。感谢您的支持。 :d – ralpu 2013-03-08 11:06:21