Maison > Article > développement back-end > Que dois-je faire si php ne prend pas en charge json_decode ?
La solution au problème que php ne prend pas en charge json_decode : implémentez d'abord la méthode d'interface jsonSerialize de la classe abstraite JsonSerializing puis spécifiez les données qui doivent être sérialisées en JSON ;
L'environnement d'exploitation de cet article : système Windows 7, PHP version 7.1, ordinateur DELL G3
Que dois-je faire si php ne fonctionne pas prend en charge json_decode ? php json_encode ne prend pas en charge les attributs privés des objets
Cet article présente que php json_encode ne prend pas en charge les attributs privés des objets. json_encode peut convertir des objets au format json et json_decode peut être utilisé pour restaurer des objets.
Mais si l'objet contient des attributs privés, les attributs privés seront perdus après l'exécution de json_encode.
Exemple : json_encode perd l'attribut privé de l'objet
<?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); ?>
Sortie :
{"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)
Après l'exécution de json_encode, l'âge de l'attribut privé est perdu.
Solution à la perte des attributs privés de l'objet après json_encode
Nous pouvons modifier la classe pour implémenter la méthode d'interface jsonSerialize de la classe abstraite JsonSerializing, en spécifiant ce qui a besoin à sérialiser en données JSON.
Pour la méthode JsonSeriallessly::jsonSerialize, veuillez vous référer au site officiel : http://php.net/manual/zh/jsonserializing.jsonserialize.php
Le code modifié est le suivant :
<?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); ?>
Sortie :
{"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
Après avoir spécifié les données qui doivent être sérialisées en JSON, json_encode peut lire l'âge de l'attribut privé.
Apprentissage recommandé : "Tutoriel vidéo PHP"
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!