Я разрабатываю веб-приложение на PHP, мне нужно перенести многие объекты с сервера как строку JSON, существует ли какая-либо библиотека, существующая для PHP, для преобразования объекта в JSON и JSON String в Objec, например, в библиотеку Gson для Java …
заранее спасибо…
Это должно сделать трюк!
// convert object => json $json = json_encode($myObject); // convert json => object $obj = json_decode($json);
Вот пример
$foo = new StdClass(); $foo->hello = "world"; $foo->bar = "baz"; $json = json_encode($foo); echo $json; //=> {"hello":"world","bar":"baz"} print_r(json_decode($json)); // stdClass Object // ( // [hello] => world // [bar] => baz // )
Если вы хотите, чтобы выход как массив, а не объект, передайте true
для json_decode
print_r(json_decode($json, true)); // Array // ( // [hello] => world // [bar] => baz // )
Подробнее о json_encode ()
См. Также: json_decode ()
для большей расширяемости для приложений с крупными приложениями используется стиль oop с инкапсулированными полями.
Простой способ :-
class Fruit implements JsonSerializable { private $type = 'Apple', $lastEaten = null; public function __construct() { $this->lastEaten = new DateTime(); } public function jsonSerialize() { return [ 'category' => $this->type, 'EatenTime' => $this->lastEaten->format(DateTime::ISO8601) ]; } }
echo json_encode (новый Fruit ()); // который выводит:
{"category":"Apple","EatenTime":"2013-01-31T11:17:07-0500"}
Real Gson на PHP: –
json_decode($json, true); // the second param being true will return associative array. This one is easy.
Я сделал способ решить эту проблему. Мой подход:
1 – Создайте абстрактный класс, который имеет метод преобразования объектов в массив (включая частный attr) с помощью Regex. 2 – Преобразовать возвращенный массив в json.
Я использую этот абстрактный класс как родительский для всех моих классов домена
Код класса:
namespace Project\core; abstract class AbstractEntity { public function getAvoidedFields() { return array (); } public function toArray() { $temp = ( array ) $this; $array = array (); foreach ( $temp as $k => $v ) { $k = preg_match ( '/^\x00(?:.*?)\x00(.+)/', $k, $matches ) ? $matches [1] : $k; if (in_array ( $k, $this->getAvoidedFields () )) { $array [$k] = ""; } else { // if it is an object recursive call if (is_object ( $v ) && $v instanceof AbstractEntity) { $array [$k] = $v->toArray(); } // if its an array pass por each item if (is_array ( $v )) { foreach ( $v as $key => $value ) { if (is_object ( $value ) && $value instanceof AbstractEntity) { $arrayReturn [$key] = $value->toArray(); } else { $arrayReturn [$key] = $value; } } $array [$k] = $arrayReturn; } // if it is not a array and a object return it if (! is_object ( $v ) && !is_array ( $v )) { $array [$k] = $v; } } } return $array; } }