自定义JSON输出CakePHP

Dre*_*w H 3 json cakephp json-view

    $user = $this->User->find( 'all' );
    $this->set( 'users', $user );
Run Code Online (Sandbox Code Playgroud)

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

在我看来,我有这个.

echo json_encode( compact( 'users' ) );
Run Code Online (Sandbox Code Playgroud)

它像这样输出json

    {
    "users": [{
        "User": {
            "user_id": "2",
            "email": "email@test.com",
            "name": "Blah"
        }]
    }
}
Run Code Online (Sandbox Code Playgroud)

无论如何要格式化这个以删除包含在"users"中的整个数组,并删除作为"User"成员的每个对象.

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

[{
    "user_id": "2",
    "email": "email@test.com",
    "name": "Blah"
}]
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

ndm*_*ndm 7

我不完全理解你的意思是" 删除包含在"users " 中的整个数组 "和" 删除每个对象是"User"的成员 ",但是根据你想要的输出格式示例,你需要提取并传递您想要编码的确切数据json_encode,而不是传递所有内容compact.

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

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

json_encode(Set::extract('/User/.', $users));
Run Code Online (Sandbox Code Playgroud)

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

[{
    "user_id": "2",
    "email": "email@test.com",
    "name": "Blah"
}]
Run Code Online (Sandbox Code Playgroud)

对于多个用户,它应该是这样的

[{
    "user_id": "1",
    "email": "foo@test.com",
    "name": "Bar"
},
{
    "user_id": "2",
    "email": "email@test.com",
    "name": "Blah"
}]
Run Code Online (Sandbox Code Playgroud)