Convert Stripe API response to JSON using stripe-php library

前端 未结 7 1745
迷失自我
迷失自我 2021-01-01 21:06

I\'m accessing customer data from the Stripe API, which I\'d like to convert to JSON. Usually I\'d convert an object to an array and use json_encode() but I don

7条回答
  •  天命终不由人
    2021-01-01 21:42

    Your top level object contains other object instances - the cast to (array) affects only the top level element. You might need to recursively walk down - but I'd do it differently here given that the classes are serializable:

    $transfer = serialize($myobject);
    

    What are you going to do with the otherwise JSONified data?

    If you're going to transfer an object without the class information you might try to use Reflection:

    abstract class Object {
    
        /**
         * initialize an object from matching properties of another object
         */
        protected function cloneInstance($obj) {
            if (is_object($obj)) {
                $srfl = new ReflectionObject($obj);
                $drfl = new ReflectionObject($this);
                $sprops = $srfl->getProperties();
                foreach ($sprops as $sprop) {
                    $sprop->setAccessible(true);
                    $name = $sprop->getName();
                    if ($drfl->hasProperty($name)) {
                        $value = $sprop->getValue($obj);
                        $propDest = $drfl->getProperty($name);
                        $propDest->setAccessible(true);
                        $propDest->setValue($this,$value);
                    }
                }
            }
            else
                Log::error('Request to clone instance %s failed - parameter is not an object', array(get_class($this)));
            return $this;
        }
    
        public function stdClass() {
            $trg = (object)array();
            $srfl = new ReflectionObject($this);
            $sprops = $srfl->getProperties();
            foreach ($sprops as $sprop) {
                if (!$sprop->isStatic()) {
                    $sprop->setAccessible(true);
                    $name = $sprop->getName();
                    $value = $sprop->getValue($this);
                    $trg->$name = $value;
                }
            }
            return $trg;
        }
    
    }
    

    This is the base class of most of my transferrable classes. It creates a stdClass object from a class, or initializes a class from a stdClass object. You might easily adopt this to your own needs (e.g. create an array).

提交回复
热议问题