Heim > Artikel > Backend-Entwicklung > Was soll ich tun, wenn PHP json_decode nicht unterstützt?
Die Lösung für das Problem, dass PHP json_decode nicht unterstützt: Implementieren Sie zuerst die Schnittstellenmethode jsonSerialize der abstrakten Klasse JsonSerializable und geben Sie dann die Daten an, die in JSON serialisiert werden müssen.
Die Betriebsumgebung dieses Artikels: Windows7-System, PHP7.1-Version, DELL G3-Computer
Was soll ich tun, wenn PHP json_decode nicht unterstützt? PHP JSON_ENCODE unterstützt keine privaten Objektattribute. Dieser Artikel stellt vor, dass PHP JSON_ENCODE keine Objektprivatattribute unterstützt.
Aber wenn das Objekt private Attribute enthält, gehen die privaten Attribute nach der Ausführung von json_encode verloren.
Beispiel: json_encode verliert das private Objektattribut
<?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); ?>
Ausgabe:
{"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)
Nach der Ausführung von json_encode geht das Alter des privaten Attributs verloren.
Lösung für den Verlust privater Attribute von Objekten nach json_encodeWir können die Klasse ändern, um die Schnittstellenmethode jsonSerialize der abstrakten JsonSerializable-Klasse zu implementieren und die Daten anzugeben, die in JSON serialisiert werden müssen.
Informationen zur JsonSerializable::jsonSerialize-Methode finden Sie auf der offiziellen Website: http://php.net/manual/zh/jsonserializable.jsonserialize.php
Der geänderte Code lautet wie folgt:
<?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); ?>
Ausgabe:
{"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
Nachdem angegeben wurde, dass es serialisiert werden muss, kann json_encode nach der Konvertierung in JSON-Daten das Alter des privaten Attributs lesen.
Empfohlenes Lernen: „
PHP-Video-TutorialDas obige ist der detaillierte Inhalt vonWas soll ich tun, wenn PHP json_decode nicht unterstützt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!