CakePHP json输出

时间:2013-03-08 16:28:00

标签: cakephp json

我试图在我的视图中输出我从Controller获得的内容作为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"}}]

我如何输出它看起来像第一个?

修改

控制器

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

查看

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

2 个答案:

答案 0 :(得分:3)

在输出步骤上美化你的json是没有意义的。如果重要的话,你可以使用外部工具来看看json。

另外,考虑在Cake中使用(JSON View)。 简而言之,您可以使用要进行jsonify的内容设置一个特殊的视图变量:

  1. 了解本地效果,请在您的操作中写下 Router::parseExtensions()
  2. 指定包含要输出的数据的变量 $this->set('_serialize', array('response')); (在json中,将有一个名为“response”的根对象,内容为$ response变量)。
  3. 使用这种方法,您不需要创建视图文件 - 如果请求具有“Accept:application / json”标题,则会自动输出json。

答案 1 :(得分:0)

只有那些json响应的区别在于第一个是带有子对象的JSON对象,第二个是带有子对象的JSON对象数组。

以下代码检索客户的所有记录。当你将它编码成json对象时,它被编码为Cutomers数组

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

您可以通过

获得第一个响应
$this->Customer->find( 'first' );

上面的代码只会产生一个Customer对象。