自定义JSON输出CakePHP

时间:2012-10-21 19:33:10

标签: json cakephp json-view

    $user = $this->User->find( 'all' );
    $this->set( 'users', $user );

我的控制器中有这个代码。

在我看来,我有这个。

echo json_encode( compact( 'users' ) );

它像这样输出json

    {
    "users": [{
        "User": {
            "user_id": "2",
            "email": "email@test.com",
            "name": "Blah"
        }]
    }
}

无论如何要格式化它以删除包含在" users"中的整个数组,并删除作为" User"

成员的每个对象。

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

[{
    "user_id": "2",
    "email": "email@test.com",
    "name": "Blah"
}]

感谢您的帮助。

2 个答案:

答案 0 :(得分:7)

我不完全明白你的意思是“ 删除整个数据包裹在”用户“ ”和“ 删除所有对象“用户”的成员 “,但根据您所需的输出格式示例,您需要提取并将要编码的确切数据传递给json_encode,而不是使用compact传递所有内容。

可以使用SetHash类(取决于您的Cake版本)进行提取

假设您的模型以默认的CakePHP格式返回数据,例如:

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

应该给你一个像这样的结构:

[{
    "user_id": "2",
    "email": "email@test.com",
    "name": "Blah"
}]

并且对于多个用户,它应该看起来像这样

[{
    "user_id": "1",
    "email": "foo@test.com",
    "name": "Bar"
},
{
    "user_id": "2",
    "email": "email@test.com",
    "name": "Blah"
}]

答案 1 :(得分:0)

像这样使用:

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

它将从结果数组中移除Model,然后移除json_encode或其他任何用途。

更多库函数Set class HereHash class Here