The solution to the problem that php does not support json_decode: first implement the interface method jsonSerialize of the JsonSerializable abstract class; then specify the data that needs to be serialized into JSON.
The operating environment of this article: windows7 system, PHP7.1 version, DELL G3 computer
What should I do if php does not support json_decode? php json_encode does not support object private attributes. This article introduces the solution to php json_encode not supporting object private attributes. json_encode can convert objects into json format, and json_decode can be used to restore objects.
But if the object contains private attributes, the private attributes will be lost after json_encode is executed.
Example: json_encode loses object private attributes
<?php // 用户类 class user{ public $id = 1; public $name = 'fdipzone'; public $profession = 'programmer'; private $age = 18; } // 对象 $oUser = new User; // json_encode $json = json_encode($oUser); echo $json; // json_decode $oUser = json_decode($json); var_dump($oUser); ?>
Output:
{"id":1,"name":"fdipzone","profession":"programmer"} object(stdClass)[2] public 'id' => int 1 public 'name' => string 'fdipzone' (length=8) public 'profession' => string 'programmer' (length=10)
After executing json_encode, the private attribute age is lost.
Solution to the loss of private attributes of the object after json_encodeWe can modify the class so that it implements the interface method jsonSerialize of the JsonSerializable abstract class, specifying what needs to be serialized into JSON data.
For the JsonSerializable::jsonSerialize method, please refer to the official website: http://php.net/manual/zh/jsonserializable.jsonserialize.php
The modified code is as follows:
<?php // 用户类 class user implements JsonSerializable{ public $id = 1; public $name = 'fdipzone'; public $profession = 'programmer'; private $age = 18; // 实现的抽象类方法,指定需要被序列化JSON的数据 public function jsonSerialize() { $data = []; foreach ($this as $key=>$val){ if ($val !== null) $data[$key] = $val; } return $data; } } // 对象 $oUser = new User; // json_encode $json = json_encode($oUser); echo $json; // json_decode $oUser = json_decode($json); var_dump($oUser); ?>
Output:
{"id":1,"name":"fdipzone","profession":"programmer","age":18} object(stdClass)[2] public 'id' => int 1 public 'name' => string 'fdipzone' (length=8) public 'profession' => string 'programmer' (length=10) public 'age' => int 18
After specifying the data that needs to be serialized into JSON, json_encode can read the private attribute age.
Recommended learning: "
PHP Video TutorialThe above is the detailed content of What should I do if php does not support json_decode?. For more information, please follow other related articles on the PHP Chinese website!