Подтвердить что ты не робот

Преобразование объекта в JSON и JSON в Object в PHP (библиотека, подобная Gson для Java)

Я разрабатываю веб-приложение в PHP,

Мне нужно перенести многие объекты с сервера как строку JSON, существует ли какая-либо библиотека, существующая для PHP, для преобразования объекта в JSON и JSON String в Objec, например, в библиотеку Gson для Java.

4b9b3361

Ответ 1

Это должно сделать трюк!

// 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()

Ответ 2

для большей расширяемости для приложений с большим масштабом используется стиль 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"}

Реальный Gson на PHP: -

Ответ 3

json_decode($json, true); 
// the second param being true will return associative array. This one is easy.

Ответ 4

Я сделал способ решить эту проблему. Мой подход:

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;
    }
}