Converting Object to JSON and JSON to Object in PHP, (library like Gson for Java)

后端 未结 4 1960
旧时难觅i
旧时难觅i 2020-11-28 04:52

I am developing a web application in PHP,

I need to transfer many objects from server as JSON string, is there any library existing for PHP to convert object to JSON

相关标签:
4条回答
  • 2020-11-28 05:17

    This should do the trick!

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

    Here's an example

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

    If you want the output as an Array instead of an Object, pass true to json_decode

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

    More about json_encode()

    See also: json_decode()

    0 讨论(0)
  • 2020-11-28 05:26
    json_decode($json, true); 
    // the second param being true will return associative array. This one is easy.
    
    0 讨论(0)
  • 2020-11-28 05:27

    I made a method to solve this. My approach is:

    1 - Create a abstract class that have a method to convert Objects to Array (including private attr) using Regex. 2 - Convert the returned array to json.

    I use this Abstract class as parent of all my domain classes

    Class code:

    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 讨论(0)
  • 2020-11-28 05:28

    for more extendability for large scale apps use oop style with encapsulated fields.

    Simple way :-

      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(new Fruit()); //which outputs:

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

    Real Gson on 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/ - serialize only
    0 讨论(0)
提交回复
热议问题