2012-10-21 49 views
3
$user = $this->User->find('all'); 
    $this->set('users', $user); 

我在我的控制器中有此代码。定制JSON输出CakePHP

在我看来,我有这个。

echo json_encode(compact('users')); 

它输出JSON这样

{ 
    "users": [{ 
     "User": { 
      "user_id": "2", 
      "email": "[email protected]", 
      "name": "Blah" 
     }] 
    } 
} 

反正有格式化这个除去包裹在“用户”整个阵列,并且还删除每一个对象是“用户”的成员。

这使得在前端使用更加困难。我希望它看起来像这样。

[{ 
    "user_id": "2", 
    "email": "[email protected]", 
    "name": "Blah" 
}] 

感谢您的任何帮助。

回答

7

我不完全理解你所说的“去除包裹在整个阵列‘用户’”和“删除的每个对象中的一员‘用户’”的意思,但根据您需要的输出格式示例,则需要提取并将要编码的确切数据传递至json_encode,而不是使用compact传递所有内容。

提取可以与SetHash类(取决于你的蛋糕版)

假设模型进行返回默认的CakePHP格式的数据,这对于例如:

json_encode(Set::extract('/User/.', $users)); 

应给你这样的结构:

[{ 
    "user_id": "2", 
    "email": "[email protected]", 
    "name": "Blah" 
}] 

并与多个用户它应该看起来像这样

[{ 
    "user_id": "1", 
    "email": "[email protected]", 
    "name": "Bar" 
}, 
{ 
    "user_id": "2", 
    "email": "[email protected]", 
    "name": "Blah" 
}] 
+0

感谢的人。锻炼出好极了 –

+0

不客气 – ndm

0

使用这样的:

$users= (Set::extract('/User/.', $users)); 
pr($users); 

它将从结果Array中Model然后json_encode或任何进一步的使用。

更多的库函数Set class HereHash class Here