Cet article présente la solution au problème selon lequel php json_encode ne prend pas en charge les propriétés privées des objets. json_encode peut convertir des objets au format json, et json_decode peut être utilisé pour les restaurer en objets.
Mais si l'objet contient des attributs privés, les attributs privés seront perdus après l'exécution de json_encode.
<?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.
On peut modifier la classe pour implémenter la méthode d'interface de la classe abstraite JsonSeriallessly, spécifier les données qui doivent être sérialisé en JSON. Pour la méthode
JsonSeriallessly::jsonSerialize, veuillez vous référer au site officiel : http://php.net/manual/zh/jsonserializing.jsonserialize.php
Après modification Le code est le suivant :Sortie :
<?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);?>
{"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
Cet article présente la solution au problème selon lequel php
json_encodene prend pas en charge les propriétés privées des objets json_encode peut convertir des objets au format json, et json_decode peut être utilisé pour les restaurer en objets. . Mais si l'objet contient des attributs privés,
les attributs privés seront perdusaprès l'exécution de json_encode. Exemple : json_encode perd l'attribut privé de l'objet
Sortie :<?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);?>
{"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)
Solution à la perte des propriétés privées des objets après json_encode
, spécifier les données qui doivent être sérialisé en JSON. Pour la méthode JsonSeriallessly::jsonSerialize, veuillez vous référer au site officiel : http://php.net/manual/zh/jsonserializing.jsonserialize.php
Après modification Le code est le suivant :
Sortie :
<?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);?>
{"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
Recommandations associées :
Types de données de base js et opérateurs de conversionUtilisation de with en JavaScript
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!