Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP类在多个级别上转换为JSON_Php_Json_Object - Fatal编程技术网

PHP类在多个级别上转换为JSON

PHP类在多个级别上转换为JSON,php,json,object,Php,Json,Object,我有一个PHP类,我想在JSON中转换为以下类型的几个级别: {"interface":{"Version":"0"},"Container":[{"id":"1","Element":[{"text":"Test","id":"0"},{"text":"Toto","id":"1"}]}]} 在我的PHP类中,有一个函数返回我的私有属性(数组)的JSON: return (json_encode((get_object_vars($this)), JSON_UNESCAPED_UNICODE

我有一个PHP类,我想在JSON中转换为以下类型的几个级别:

{"interface":{"Version":"0"},"Container":[{"id":"1","Element":[{"text":"Test","id":"0"},{"text":"Toto","id":"1"}]}]}
在我的PHP类中,有一个函数返回我的私有属性(数组)的JSON:

return (json_encode((get_object_vars($this)), JSON_UNESCAPED_UNICODE));
我的类的私有属性:

private $interface = '';
private $Container = array(array('id' => '1'));
private $Element = array('text' => 'Test', 'id' => '0');
你知道我怎么能有一个像上面这样的JSON吗


很高兴阅读您的文章。

您需要构建它,工作示例:

输出


不确定您的类成员,但只要它们是可访问的,您就可以生成JSON字符串。下面是这个例子

    $Contenant = array(array('id' => '1'));
    $Element = array('text' => 'Test', 'id' => '0');

    $json = json_encode(array('inerrface'=>array(
                        'content'=>$Contenant,
                        "Element"=>$Element
                          )     
                       )
                );
    echo $json ;

您可以像下面的示例中那样实现IteratorAggregate接口

class YourClass implements IteratorAggregate {
    protected $member1 = array();
    protected $member2 = array();

    ...

    public function getIterator() {
        $tmpArr = array();

        // create the structure you want in $tmpArr

        return new ArrayIterator($tmpArr);
    }
}

$myClass = new MyClass();
$iterator = $myClass->getIterator();

$encodedData = json_encode($iterator);
从PHP5.4开始,您就可以使用JsonSerializable接口了。使用此接口,您可以使用直接修改,如中给出的示例所示:


玩得开心

这将让您开始,看看构造函数需要什么样的数据输入。您可以让一个私有函数做同样的事情,将您的值分配给结构,然后打印它:

class Test{

    private $data;

    public function __construct($version = 0, $records = array()){

        $data['interface'] = array('Version' => $version);
        $data['Container'] = array();

        for ($i = 0; $i < count($records); $i++) {
            $data['Container'][$i] = $records[$i];
        }

        // your test input
        print_r(json_decode('{"interface":{"Version":"0"},"Container":[{"id":"1","Element":[{"text":"Test","id":"0"},{"text":"Toto","id":"1"}]}]}',true));
        // actual input
        print_r($data);
        // printing our actual data as json string
        echo json_encode($data);
    }

    public function __destruct(){

    }

}

$element1 = array('text' => 'Test', 'id' => 0);
$element2 = array('text' => 'Toto', 'id' => 1);
$elements = array($element1, $element2);
$record = array('id' => 1, 'element' => $elements);
$records = array($record);

new Test(0, $records);
类测试{
私人数据;
公共函数构造($version=0,$records=array()){
$data['interface']=array('Version'=>$Version);
$data['Container']=array();
对于($i=0;$iTest','id'=>0);
$element2=数组('text'=>Toto','id'=>1);
$elements=数组($element1,$element2);
$record=array('id'=>1,'element'=>$elements);
$records=数组($record);
新测试(0美元记录);

为什么不以json_编码时输出正好是所需的方式构造变量?感谢您的回答,我的json将与数据库一起动态,所以我不能这样做。
class YourClass implements IteratorAggregate {
    protected $member1 = array();
    protected $member2 = array();

    ...

    public function getIterator() {
        $tmpArr = array();

        // create the structure you want in $tmpArr

        return new ArrayIterator($tmpArr);
    }
}

$myClass = new MyClass();
$iterator = $myClass->getIterator();

$encodedData = json_encode($iterator);
class Test{

    private $data;

    public function __construct($version = 0, $records = array()){

        $data['interface'] = array('Version' => $version);
        $data['Container'] = array();

        for ($i = 0; $i < count($records); $i++) {
            $data['Container'][$i] = $records[$i];
        }

        // your test input
        print_r(json_decode('{"interface":{"Version":"0"},"Container":[{"id":"1","Element":[{"text":"Test","id":"0"},{"text":"Toto","id":"1"}]}]}',true));
        // actual input
        print_r($data);
        // printing our actual data as json string
        echo json_encode($data);
    }

    public function __destruct(){

    }

}

$element1 = array('text' => 'Test', 'id' => 0);
$element2 = array('text' => 'Toto', 'id' => 1);
$elements = array($element1, $element2);
$record = array('id' => 1, 'element' => $elements);
$records = array($record);

new Test(0, $records);