2013-03-08 104 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