2015-06-01 2 views
2

Im работает и новый, как генерировать json на массивах в php. есть ли альтернативные способы или лучший способ генерации json на php?PHP: альтернативные способы генерации json?

ЗДЕСЬ МОЙ КОД:

<?php 
$array = 
     array(

     'name' => 

     array(

     'gender'=> 'male-female', 
     'location' => 'adress here'), 

     'age' => 'age here', 

     'about me' => array(array(
     'birthday' => 'MM-DD-YYYY', 
     'status' => 'status here', 
     'childrens' => 'childrens here')), 

     'employer' => array('bank','fastfood','sales'), 

     'nameofchildrens' => array(array(
     'name1' => "namehere1" , 'employer2' => array('bank','fastfood','sales'), 
     'name2' => "namehere2" , 'employer1' => array('bank','fastfood','sales'))), 

     'relatives' => array(), 

     'siblings' => array(), 

     'ancestors' => array(), 

     'pets' => array(array('dog','cat','rabbit')), 

     'sports' => array('basketball','badminton','volleyball'), 

     ); 

echo json_encode($array); 
?> 

Это, как я генерировать JSON с форматом я хотел. Он работает, но есть ли кто-нибудь, кто может предоставить мне альтернативные способы генерации json-формата?

ВЫВОД:

{"name":{"gender":"male-female","location":"adress here"},"age":"age here","about me":[{"birthday":"MM-DD-YYYY","status":"status here","childrens":"childrens here"}],"employer":["bank","fastfood","sales"],"nameofchildrens":[{"name1":"namehere1","employer2":["bank","fastfood","sales"],"name2":"namehere2","employer1":["bank","fastfood","sales"]}],"relatives":[],"siblings":[],"ancestors":[],"pets":[["dog","cat","rabbit"]],"sports":["basketball","badminton","volleyball"]} 
+0

Ну, пылесос может быть, используя '[]' [обозначения] (http://php.net/manual/en/language.types.array.php) вместо 'массива()'. Это и быть притворщиком с отступом! – ficuscr

+0

Помимо просто написания его в чистом JSON в первую очередь? № – Sammitch

+1

Вы можете создать класс Person, а затем запустить json_encode на объекте. – Karl

ответ

0

Многие люди перед использованием Zend_Json из-за общих родных ошибок PHP JSON. Но нет никакой разницы.

Мой личный фаворит - JMS/Serializer, который сериализует массивы и объекты, используя карты метаданных или используя аннотации. Пока у вас есть представление Entity/DAO, вы можете просто определить (un) сериализующую схему и просто сериализовать объекты или коллекции объектов, не определяя настраиваемые массивы.

Документация: http://jmsyst.com/libs/serializer

Github: https://github.com/schmittjoh/serializer

2

Вы могли бы сделать класс прогоне json_encode() на объекте.

<?php 
class Person { 
    public $name; 
    public $age; 
} 
$person = new Person(); 
$person->name = 'Foo'; 
$person->age = 22; 

echo json_encode($person); 

Это в это Простейшая форма, так что если вы havan't читать на классы и объекты, которые я предлагаю вам сделать.

http://php.net/manual/en/language.oop5.php

+0

Я пробовал это раньше, но не разрешил мне формат json я хочу. например, когда я добавляю некоторый массив(). –

+0

Проблема с использованием 'json_encode()' объектов заключается в том, что он будет кодировать только общедоступные атрибуты, частные attrs будут пропускаться. – Sammitch

+0

PHP имеет магический метод для [__toString()] (http://php.net/manual/en/language.oop5.magic.php#object.tostring), но ничего подобного для массивов/JSON. Вы можете написать метод 'toJSON()', который отбрасывает представление объекта по вашему желанию и вызывает его. 'Json_encode ($ obj-> toJSON())'. Обязательно прочтите это [ссылка] (http://php.net/manual/en/language.oop5.php) из ответа. – ficuscr

1

Я нашел этот путь, но это не подводил меня к формату я хотел.

<?php 
    $obj = new stdClass(); 
    $obj->metadata = "Devices per year"; 
    $obj->data = array(
     array('1999','3.0'), 
     array('2000','3.9'), 
     //and so on... 
    ); 

    echo json_encode($obj); 
?> 
Смежные вопросы