2013-03-08 63 views
0

我想輸出我的控制器在我的視圖中輸出的內容作爲json,但我認爲我輸出的很奇怪。CakePHP json輸出

在網絡上搜索我的JSON,並將其與輸出看起來像這樣出現:

{"menu": { 
    "id": "file", 
    "value": "File", 
    "popup": { 
    "menuitem": [ 
     {"value": "New", "onclick": "CreateNewDoc()"}, 
     {"value": "Open", "onclick": "OpenDoc()"}, 
     {"value": "Close", "onclick": "CloseDoc()"} 
    ] 
    } 
}} 

但是我的僅僅是未格式化,看起來像這樣。

[{"Customer":{"id":"1","first_name":"Ian","last_name":"Smith","address_1":"10 High Streets","address_2":"","town_city":"Plymouth","county":"Devon","postcode":"PL1 2JD"}},{"Customer":{"id":"2","first_name":"David","last_name":"Smith","address_1":"52 Low Avenue","address_2":"","town_city":"Exeter","county":"Devon","postcode":"EX2 1KO"}}] 

我怎樣才能輸出它看起來像第一個?

EDIT

控制器

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

查看

<?php echo json_encode($user); ?> 
+0

好的......看編輯。 – user667430 2013-03-08 16:37:11

+0

你爲什麼在意它看起來像什麼?這是正確格式的正確數據 - 在這種情況下代碼的視覺外觀應該不重要,並且您希望它儘可能精簡。 – Dave 2013-03-08 16:55:39

回答

3

在輸出步驟中沒有理由美化你的json。如果它很重要,你可以使用外部工具來製作json的外觀。

另外,考慮在Cake中使用(JSON View)。 總之,你設置一個特殊的視圖變量的內容要jsonify:

  1. 局部效果,你的行動寫Router::parseExtensions()
  2. 指定變量,它包含您要輸出的數據$this->set('_serialize', array('response'));(在json中,會有一個名爲「response」的根對象,其內容爲$ response變量)。

使用這種方法,您不需要創建視圖文件 - 如果請求具有「Accept:application/json」標頭,json將自動輸出。

+0

有關此方法的更多詳細信息:http://stackoverflow.com/questions/10099449/creating-a-rest-api-with-cakephp/10099878#10099878 – Costa 2013-03-11 06:05:22

+1

@Costa鏈接似乎中斷 – 2014-02-19 15:37:06

+0

@CarlosBarcelona由於某種原因,整個問題是刪除(即使答案有15 + upvotes) - Stackoverflow是非常肛門刪除問題,所以它幾乎永遠消失。 – Costa 2014-02-19 23:28:01

0
在那些JSON響應

唯一的區別是,所述第一個是與子對象和第二個JSON對象JSON的陣列對象與他們的子對象。

下面的代碼檢索客戶的所有記錄。而當你編碼成JSON對象,它被編碼爲地址通知客戶

$this->Customer->find('all'); 

可以實現響應像的第一個的陣列由

$this->Customer->find('first'); 

上面的代碼將只產生一個客戶對象。