0

コントローラから取得したコンテンツをjsonとして出力しようとしていますが、出力がおかしいと思います。

Webで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 ) を使用することを検討してください。つまり、json 化するコンテンツを含む特別なビュー変数を設定します。

  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 オブジェクトであり、2 番目の応答がサブ オブジェクトを含む JSON オブジェクトの配列であることです。

以下のコードは、顧客のすべてのレコードを取得します。そして、それをjsonオブジェクトにエンコードすると、Cutomersの配列としてエンコードされます

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

最初のような応答を得ることができます

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

上記のコードは、Customer オブジェクトを 1 つだけ生成します。

于 2013-03-08T16:59:24.657 に答える