0

我试图在我的视图中将我从控制器获得的内容输出为 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); ?>
4

2 回答 2

3

在输出步骤中美化你的 json 是没有意义的。如果这很重要,您可以使用外部工具来制作漂亮的 json。

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

  1. 为了局部效果,写在你的行动中Router::parseExtensions()
  2. 指定包含要输出的数据的变量$this->set('_serialize', array('response'));(在 json 中,将有一个名为“response”的根对象,其内容为 $response 变量)。

使用这种方法,您无需创建视图文件 - 如果请求具有“Accept: application/json”标头,则会自动输出 json。

于 2013-03-08T17:24:30.527 回答
0

这些 json 响应的唯一区别是第一个是带有子对象的 JSON 对象,第二个是带有子对象的 JSON 对象数组。

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

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

您可以通过以下方式实现第一个响应

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

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

于 2013-03-08T16:59:24.657 回答