2013-10-06 50 views
0

嗨,大家好我有一個問題。 ,而我是執行一些代碼,我達到了,我需要在每個對象使用的toJSON方法對象在PHP中的json

,所以我已經加入此代碼

public function toJson(){ 
    return json_encode($this); // $this which refers to the current object 

} 

它已經回到剛剛{},所以我知道這個類裏面的點它不承認這個 類的屬性,以便相反,我試圖將其轉換像

public function toJson(){ 
    $array=(array)$this; 
    return json_encode($array); 

} 

我得到怪異的結果

string '{"\u0000Response\u0000status":0,"\u0000Response\u0000data":null,"\u0000Response\u0000error":" type non valide "}' (length=112) 

我可能最終編寫自定義的JSON對象

這樣

public function toJson(){ 
     $myjson="{field1:data1,field2:data2}"; 
     return $myjson; 

    } 

,但我不希望每次我增加新屬性

我很感激,如果時間倒退回到它你有任何想法爲什麼轉換這不起作用

+0

必須愛PHP的命名空間的想法... :-) –

+0

你究竟試圖返回作爲JSON格式呢?該對象的屬性? – Shoe

+0

@Jefffrey是的,但沒有與空字符錯位,我假設 –

回答

1

您需要將對象屬性轉換爲陣列Ÿ編碼前JSON:

public function toJson(){ 
    return json_encode(get_object_vars($this)); 
} 

正如你所看到的,你可以使用get_object_vars來實現這一目標。

+0

我在第二個示例(數組)中進行了顯式轉換$ this – user1825286

+0

@ user1825286,它不起作用。 – Shoe

1

這種用法對我的作品與基本類型,數組,關聯數組和對象:

<?php 

class Test { 
    var $a = "1"; 
    var $b = array(3, 5, "cat", "monkey"); 
    var $c = array("animal" => "dromedary"); 
    public function toJson() { 
    return json_encode($this); 
    } 
} 

$test = new Test(); 
$test->d = new Test(); 
echo $test->toJson(); 

?> 

運行它會導致預期的JSON輸出:

$ php test.php 
{"a":"1","b":[3,5,"cat","monkey"],"c":{"animal":"dromedary"},"d":{"a":"1","b":[3,5,"cat","monkey"],"c": {"animal":"dromedary"}}} 

我仍然在運行PHP 5.3 0.15。

+0

奇怪的真的很奇怪 – user1825286

+0

如果你在你的代碼中有遞歸怎麼辦?無盡的絃樂? – vikingmaster

+3

一個男人走進醫生辦公室,說道:「醫生,如果我在這裏捅了一下,它會很痛。醫生回答:「那麼不要那樣做」。我的意思是,不要在更復雜的對象上使用這種方法。這適用於簡單模型對象(如java世界中的bean)。 –