不能在php中转换json中的对象数组

时间:2015-02-17 13:16:17

标签: php json

Bean.php

class Bean  {
  private $ename = '';
 private $fathername='';



function getEname() {
     return $this->ename;
}

 function getFathername() {
     return $this->fathername;
}

 function setEname($ename) {
     $this->ename = $ename;
}

 function setFathername($fathername) {
     $this->fathername = $fathername;
}

}

test.php的

require 'Bean.php';
$finaldata = array();
$k = new Bean();
$k->setEname("Sahil Manchanda");
$k->setFathername("Pawan Kumar Manchadna");
$c = new Bean();
$c->setEname("Rahul Khurana");
$c->setFathername("Vijay Kumar Khurana");
$d = new Bean();
$d->setEname("Gourav Arora");
$d->setFathername("Mangat Rai Arora");
$finaldata[] = $k;
$finaldata[] = $c;
$finaldata[] = $d;
echo json_encode($finaldata);

输出:

[{},{},{}]

它没有将数组转换为json。我创建了一个包含两个参数的Bean类,然后在其他文件中创建了三个bean类对象,然后将它存储在一个数组中。当我试图在JOSN中编码时,它给了我三个空的json数组。请告诉我我做错了什么.....

3 个答案:

答案 0 :(得分:0)

属性是私有的。您需要使用bean-> getName方法将它们包含在json中。或者公开

答案 1 :(得分:0)

使用这样的getter来制作数组并返回,因为你无法使用私有属性。

$finaldata[0]['name'] = $k->getEname();
$finaldata[0]['fathername']  =  $k->getFathername();
$finaldata[1]['name']  =  $c->getEname();
$finaldata[1]['fathername']  =  $c->getFathername();
$finaldata[2]['name']  =  $d->getEname();
$finaldata[2]['fathername']  =  $d->getFathername();


json_encode($finaldata);

答案 2 :(得分:-2)

标题只表示内容的编码内容。不一定可以从内容本身推断内容的类型,即您不一定只看内容并知道如何处理它。这就是HTTP标头的用途,它们告诉收件人他们(应该)处理的是什么类型的内容。

Content-type: application/json; charset=utf-8将内容指定为JSON格式,以UTF-8字符编码进行编码。对于JSON来说,指定编码有点多余,因为JSON的默认(仅?)编码是UTF-8。因此,在这种情况下,接收服务器显然很高兴知道它正在处理JSON并且假设默认情况下编码是UTF-8,这就是为什么它可以使用或不使用标头。

 class Bean  {
 private $ename = '';
 private $fathername='';



Public function getEname() {
     return $this->ename;
}

 Public function getFathername() {
     return $this->fathername;
}

 Public function setEname($ename) {
     $this->ename = $ename;
}

 Public function setFathername($fathername) {
     $this->fathername = $fathername;
}

}