2014-01-14 3 views
0

У меня есть класс PHP я хотел бы преобразовать в формат JSON на нескольких уровнях, как этот тип:PHP класс JSON на нескольких уровнях

{"interface":{"Version":"0"},"Container":[{"id":"1","Element":[{"text":"Test","id":"0"},{"text":"Toto","id":"1"}]}]} 

В моем PHP класс У меня есть функция, который возвращает JSON из мои личные атрибуты, которые являются массивы:

return (json_encode((get_object_vars($this)), JSON_UNESCAPED_UNICODE)); 

Частные атрибуты моего класса:

private $interface = ''; 
private $Container = array(array('id' => '1')); 
private $Element = array('text' => 'Test', 'id' => '0'); 

знаете ли вы, как я мог бы использовать JSON, как указано выше?

С удовольствием читаю вас.

+0

почему не структурирование переменных таким образом, что, когда вы json_encode, выход будет точно, что вам нужно ? – Syd

+0

Спасибо за ответ, My JSON будет динамическим с базой данных, поэтому я не могу этого сделать. – Louis

ответ

0

Вам необходимо структурировать, работая пример: example

class test { 
    private $interface = ''; 
    private $Contenant = array(array('id' => '1')); 
    //private $Element = array(array('text' => 'Test', 'id' => '0')); 

    public function json(){ 

     $this->Contenant = array(
      array('id' => '1', 
       'Element' => array(array('text' => 'Test', 'id' => '0')) 
       ), 

     ); 

     return json_encode((get_object_vars($this)), JSON_UNESCAPED_UNICODE); 
    } 
} 


$t = new test(); 
$encode = $t->json(); 

echo $encode; 

ВЫВОД

{"interface":"","Contenant":[{"id":"1","Element":[{"text":"Test","id":"0"}]}]} 

0

Не уверен, о своих членах класса, но до тех пор, как они доступны вы можете создать строку JSON. Ниже, если пример этого

$Contenant = array(array('id' => '1')); 
    $Element = array('text' => 'Test', 'id' => '0'); 

    $json = json_encode(array('inerrface'=>array(
         'content'=>$Contenant, 
         "Element"=>$Element 
         )  
         ) 
       ); 
    echo $json ; 
0

Вы могли бы реализовать интерфейс IteratorAggregate, как в следующем примере

class YourClass implements IteratorAggregate { 
    protected $member1 = array(); 
    protected $member2 = array(); 

    ... 

    public function getIterator() { 
     $tmpArr = array(); 

     // create the structure you want in $tmpArr 

     return new ArrayIterator($tmpArr); 
    } 
} 

$myClass = new MyClass(); 
$iterator = $myClass->getIterator(); 

$encodedData = json_encode($iterator); 

На PHP5.4 у вас есть JsonSerializable интерфейс готов к использованию. С помощью этого интерфейса вы не можете использовать прямые модификации, как в примере, приведенном в: http://de2.php.net/manual/en/jsonserializable.jsonserialize.php

Получайте удовольствие! ;)

0

Это позволит вам начать работу с конструктором, который требует ввода данных. Вы могли бы сделать закрытую функцию делать то же самым, назначая свои значения в структуру, а затем напечатать его:

class Test{ 

    private $data; 

    public function __construct($version = 0, $records = array()){ 

     $data['interface'] = array('Version' => $version); 
     $data['Container'] = array(); 

     for ($i = 0; $i < count($records); $i++) { 
      $data['Container'][$i] = $records[$i]; 
     } 

     // your test input 
     print_r(json_decode('{"interface":{"Version":"0"},"Container":[{"id":"1","Element":[{"text":"Test","id":"0"},{"text":"Toto","id":"1"}]}]}',true)); 
     // actual input 
     print_r($data); 
     // printing our actual data as json string 
     echo json_encode($data); 
    } 

    public function __destruct(){ 

    } 

} 

$element1 = array('text' => 'Test', 'id' => 0); 
$element2 = array('text' => 'Toto', 'id' => 1); 
$elements = array($element1, $element2); 
$record = array('id' => 1, 'element' => $elements); 
$records = array($record); 

new Test(0, $records); 
Смежные вопросы