2013-10-06 4 views
0

привет, ребята, у меня проблема. в то время как я был реализации код я достиг точки, что мне нужно использовать toJson метод в каждом объектеобъект для json в php

так внутри класса я добавили этот код

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

gotta love идея PHP о пространствах имен ... :-) –

+0

Что именно вы пытаетесь вернуть в формате JSON? Свойства объекта? – Shoe

+0

@Jefffrey yep, но не искаженный нулевыми символами, я предполагаю, что –

ответ

1

Вам необходимо преобразовать свойства объекта в arra у перед кодированием в формате 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

weird really weird – user1825286

+0

Что делать, если у вас есть рекурсия в вашем коде? Бесконечная строка? – vikingmaster

+3

Парень ходит в кабинет врача и говорит: «Док, мне больно, если я ткнул себя здесь». Врач отвечает: «Не делай этого тогда». И под этим я имею в виду, не используйте этот метод для более сложных объектов. Это работает для простых объектов модели (например, bean-компонентов в java-мире). –

Смежные вопросы