Home  >  Article  >  Backend Development  >  What should I do if php does not support json_decode?

What should I do if php does not support json_decode?

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

The solution to the problem that php does not support json_decode: first implement the interface method jsonSerialize of the JsonSerializable abstract class; then specify the data that needs to be serialized into JSON.

What should I do if php does not support json_decode?

The operating environment of this article: windows7 system, PHP7.1 version, DELL G3 computer

What should I do if php does not support json_decode? php json_encode does not support object private attributes. This article introduces the solution to php json_encode not supporting object private attributes. json_encode can convert objects into json format, and json_decode can be used to restore objects.

But if the object contains private attributes, the private attributes will be lost after json_encode is executed.

Example: json_encode loses object private attributes

<?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);
?>

Output:

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

After executing json_encode, the private attribute age is lost.

Solution to the loss of private attributes of the object after json_encode

We can modify the class so that it implements the interface method jsonSerialize of the JsonSerializable abstract class, specifying what needs to be serialized into JSON data.

For the JsonSerializable::jsonSerialize method, please refer to the official website: http://php.net/manual/zh/jsonserializable.jsonserialize.php

The modified code is as follows:

<?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);
?>

Output:

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

After specifying the data that needs to be serialized into JSON, json_encode can read the private attribute age.

Recommended learning: "

PHP Video Tutorial

"

The above is the detailed content of What should I do if php does not support json_decode?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn