Maison  >  Article  >  développement back-end  >  Que dois-je faire si php ne prend pas en charge json_decode ?

Que dois-je faire si php ne prend pas en charge json_decode ?

藏色散人
藏色散人original
2021-06-15 09:58:321447parcourir

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 ;

Que dois-je faire si php ne prend pas en charge json_decode ?

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 = &#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);
?>

Sortie :

{"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)

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 = &#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);
?>

Sortie :

{"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

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn