PHP 对象到 JSON:如何创建具有多个递归子级的类?

我需要创建一个 PHP 类,该类将具有该类的多个父子关系,以便转换后的 JSON 字符串看起来与此类似。如果“children”为空数组,如何使其不出现在 JSON 中?


{   name: "Element Parent",

    code: "000"

    children: [

        {

            name: "Element Child 1"

            code: "001"

            children: [

                {

                    name: "Element Child 1A"

                    code: "001A"

                },

                {

                    name: "Element Child 1B"

                    code: "001B"

                    children: [

                        {

                            name: "Element Child 1BA"

                            code: "001BA"

                        }

                    ]

                }

            ]

        }

        ,

        {

            name: "Element Child 2"

            code: "002"

        }

    ]

}

我正在尝试创建一个可以转换为上面的 JSON 字符串的 PHP 类。


<?php


class Element implements \JsonSerializable

{

    private $name;

    private $code;

    

    public function __construct($name, $code, )

    {

        $this->name = $name;

        $this->code = $code;

    }

    

    public function jsonSerialize()

    {

        return get_object_vars($this);

    }

    

    public function toJSON(){

        return json_encode($this);

    }

    

    public $children[] = array(); // to contain Element children class 

}


$element = new Element("Element Parent", 000);


$elementChild1 = new Element("Element Child 1", "001");


$elementChild1A = new Element("Element Child 1A", "001A");


$elementChild1B = new Element("Element Child 1B", "001B");

$elementChild1BA = new Element("Element Child 1BA", "001BA");

$elementChild1B->children[] = $elementChild1BA;


$elementChild1->children[] = $elementChild1A;

$elementChild1->children[] = $elementChild1B;


$element->children[] = elementChild1;


$elementChild2 = new Element("Element Child 2", "002");

$element->children[] = elementChild2;


echo $element->toJSON();


?>

非常感谢。


繁花不似锦
浏览 105回答 1
1回答

慕容森

在jsonSerialize您实现的函数中,您可以更改序列化行为。在那里,您可以检查是否有儿童,并在需要时将其留在外面。在这种情况下,你最终会得到这样的结果:public function jsonSerialize() {&nbsp; $data = [&nbsp; &nbsp; "name" => $this->name,&nbsp; &nbsp; "code" => $this->code&nbsp; ];&nbsp; if(!empty($this->children)) {&nbsp; &nbsp; $data["children"] = $this->children;&nbsp; }&nbsp; return $data;}
打开App,查看更多内容
随时随地看视频慕课网APP