Heim  >  Artikel  >  Backend-Entwicklung  >  Was soll ich tun, wenn PHP json_decode nicht unterstützt?

Was soll ich tun, wenn PHP json_decode nicht unterstützt?

藏色散人
藏色散人Original
2021-06-15 09:58:321395Durchsuche

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.

Was soll ich tun, wenn PHP json_decode nicht unterstützt?

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 = &#39;fdipzone&#39;;
    public $profession = &#39;programmer&#39;;
    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 &#39;id&#39; => int 1
  public &#39;name&#39; => string &#39;fdipzone&#39; (length=8)
  public &#39;profession&#39; => string &#39;programmer&#39; (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_encode

Wir 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 = &#39;fdipzone&#39;;
    public $profession = &#39;programmer&#39;;
    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 &#39;id&#39; => int 1
  public &#39;name&#39; => string &#39;fdipzone&#39; (length=8)
  public &#39;profession&#39; => string &#39;programmer&#39; (length=10)
  public &#39;age&#39; => 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-Tutorial

Das 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn