CakePHP json输出
问题描述:
我想输出我的控制器在我的视图中输出的内容作为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); ?>
答
在输出步骤中没有理由美化你的json。如果它很重要,你可以使用外部工具来制作json的外观。
另外,考虑在Cake中使用(JSON View)。 总之,你设置一个特殊的视图变量的内容要jsonify:
- 局部效果,你的行动写
Router::parseExtensions()
- 指定变量,它包含您要输出的数据
$this->set('_serialize', array('response'));
(在json中,会有一个名为“response”的根对象,其内容为$ response变量)。
使用这种方法,您不需要创建视图文件 - 如果请求具有“Accept:application/json”标头,json将自动输出。
答
在那些JSON响应
唯一的区别是,所述第一个是与子对象和第二个JSON对象JSON的阵列对象与他们的子对象。
下面的代码检索客户的所有记录。而当你编码成JSON对象,它被编码为地址通知客户
$this->Customer->find('all');
可以实现响应像的第一个的阵列由
$this->Customer->find('first');
上面的代码将只产生一个客户对象。
好的......看编辑。 – user667430 2013-03-08 16:37:11
你为什么在意它看起来像什么?这是正确格式的正确数据 - 在这种情况下代码的视觉外观应该不重要,并且您希望它尽可能精简。 – Dave 2013-03-08 16:55:39