Codeigniter - post中的json对象数组

时间:2013-09-29 01:52:58

标签: php jquery json codeigniter

在fire bug中我查看了我的jquery post请求参数,就像这样

adults            1
applicants[]    [object Object]
attendees   1
children    0

在这个帖子请求中,名为 applicants 的数组包含json对象,我希望迭代并在我的codeigniter控制器中提取值。 json字符串可能看起来像这样

({attendees:"2", 
  adults:"2", 
  children:"0", 
  grptype:"2", 
  'applicants[]':[{firstname:"John", lastname:"Doe", age:"33", allergies:"true", diabetic:"true",    lactose:"false", note:"nuts"}, {firstname:"Jane", lastname:"Doe", age:"34", allergies:"true", diabetic:"false", lactose:"false", note:"pollen"}]
})

看看上面的申请人[],看看我有两个人的信息作为json对象。我不确定如何访问我的控制器中的数据。看到这个

$applicants = $this->input->post('applicants');
$this->output->append_output("<br/>Here: " . $applicants[0].firstname );

我在想$申请人[0] woild引用json对象,我可以根据需要提取值。不确定帽子我做错了。谢谢你们。

修改 所以我调整了我的json,看起来像这样

adults  2
applicants[]    {firstname:"John", lastname:"Doe", age:"23", allergies:"true", diabetic:"true", lactose:"false", note:"nuts"}
applicants[]    {firstname:"Jane", lastname:"Doe", age:"23", allergies:"false", diabetic:"false", lactose:"false", note:""}
attendees   2
children    0

现在我仍然收到错误说

**Message: json_decode() expects parameter 1 to be string, array given**

有什么想法吗?

编辑2

好的mu数据现在像这样liiks

adults  1
applicants[]    {"firstname": "John", "lastname": "Doe", "age": "34", "allergies": "true", "diabetic": "true", "lactose": "false", "note": "nuts"}
attendees   1
children    0

在控制器ID中执行此操作

$applications = $this->input->post('applicants');
foreach ( $applications as $item)
{
  $item = json_decode($item, true);  
  $this->output->append_output(print_r($item));
}

这是该逻辑的结果

Array
(
    [firstname] => John
    [lastname] => Doe
    [age] => 34
    [allergies] => true
    [diabetic] => true
    [lactose] => false
    [note] => nuts
)

不确定我做错了什么,无论我做什么来访问dater我都会收到错误,因为我无法像这样访问它。如何提取值?

2 个答案:

答案 0 :(得分:3)

您必须使用

在服务器上对其进行解码
$applications = json_decode($this->input->post('applicants'), true);

因此,它将成为一个关联数组,您可以像array一样使用它,而json_decode中没有第二个参数(true),json将被转换为一个对象。在解码之前,它只是stringjson/java script object notation字符串)。

更新:由于它已经是一个对象数组,因此您无需使用json_decode,只需在view中循环播放数组

foreach($applicants as $item)
{
     echo $item->firstname . '<br />';
     echo $item->lastname . '<br />';
     // ...
}

根据编辑2,它应该作为数组访问

echo $item['firstname'] . '<br />'

答案 1 :(得分:0)

试试这个plz

$applicants = $this->input->post('applicants');
$json_output = json_decode($applicants );
foreach ( $json_output as $person)
{
  $this->output->append_output("<br/>Here: " . $person->firstname );
}

$json_output = json_decode($applicants,TRUE );
echo $json_output[0][firstname] ;