Conversion D'objet en JSON et JSON en objet en PHP, (bibliothèque comme Gson pour Java)

Je développe une application web en PHP,

J'ai besoin de transférer de nombreux objets du serveur en tant que chaîne JSON, y a-t-il une bibliothèque existante pour PHP pour convertir l'objet en JSON et la chaîne JSON en Object, comme la bibliothèque Gson pour Java.

42
demandé sur Script47 2012-03-25 10:58:49

4 réponses

Cela devrait faire l'affaire!

// convert object => json
$json = json_encode($myObject);

// convert json => object
$obj = json_decode($json);

Voici un exemple

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

Si vous voulez que la sortie soit un tableau au lieu d'un objet, passez true à json_decode

print_r(json_decode($json, true));
// Array
// (
//   [hello] => world
//   [bar] => baz
// )    

Plus d'informations sur json_encode()

Voir aussi: json_decode()

84
répondu maček 2013-06-16 17:47:17

Pour plus d'extensibilité pour les applications à grande échelle, utilisez le style poo avec des champs encapsulés.

Manière Simple: -

  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(nouveau Fruit()); //sorties:

{"category":"Apple","EatenTime":"2013-01-31T11:17:07-0500"}

Réel Gson sur PHP :-

  1. http://jmsyst.com/libs/serializer
  2. http://symfony.com/doc/current/components/serializer.html
  3. http://framework.zend.com/manual/current/en/modules/zend.serializer.html
  4. http://fractal.thephpleague.com/ - sérialiser uniquement
14
répondu Oshanz 2015-12-08 09:25:36
json_decode($json, true); 
// the second param being true will return associative array. This one is easy.
4
répondu Kishor Kundan 2012-03-25 10:31:11

J'ai fait une méthode pour résoudre ce problème. Mon approche est:

1-créez une classe abstraite qui a une méthode pour convertir des objets en Tableau (y compris attr privé) en utilisant Regex. 2-convertir le tableau retourné en JSON.

J'utilise cette classe abstraite comme parent de toutes mes classes de domaine

Code de classe:

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;
    }
}
0
répondu ivanknow 2016-02-22 13:36:54