2012-10-21 40 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