2013-03-08 62 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'); 

上面的代码将只产生一个客户对象。