PHP类在多个级别上转换为JSON
我有一个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
{"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);