0

CodeIgniter のコントローラーにエラー応答を送信するモデルがあり、それが単なる JSON エンコーダーであるビューに渡されます。これがモデルの配列です。

return $posts[] = array('complete'=>0,'error'=>1003, 'message'=>'Username already exists');

私が抱えている問題は、エラーの配列が必要になることがあるため、 $posts 変数の後にこれらの角括弧が必要なことです。ただし、単一の配列をビューに渡すと、角かっこなしで JSON がエンコードされますが、角かっこを含む複数の配列がある場合は、毎回 JSON に角かっこが必要です。これがコントローラーです...

$data['data'] = $this->logins_model->signup($post_data);  
$this->load->view('json', $data);  

これがビューです...

header('Content-type: application/json');  
$response['response'] = $data;  
echo json_encode($response); 

このような JSON 応答が必要です

{
    "response": [
        {
            "complete": 0, 
            "error": 1003, 
            "message": "Username already exists"
        }
    ]
}  

これではない!

{
    "response": {
        "complete": 0, 
        "error": 1003, 
        "message": "Username already exists"
    }
}
4

2 に答える 2

1

配列を取得したいのでjson、php配列にも含める必要があります(つまり、データ構造が満たされている必要があります)。そう$response['response'] = $data;あるべき$response['response'] = array($data);

あなたの例では次のようvar_dump($response);になります:

array(1) {
  ["response"]=>
  array(3) {
    ["complete"]=>
    int(0)
    ["error"]=>
    int(1003)
    ["message"]=>
    string(23) "Username already exists"
  }
}

ご覧のとおり$response['response']、 のオブジェクトですjson

json に変換するデータ構造に置き換える$response['response'] = $data;と、次のようになります。$response['response'] = array($data);

array(1) {
  ["response"]=>
  array(1) {
    [0]=>
    array(3) {
      ["complete"]=>
      int(0)
      ["error"]=>
      int(1003)
      ["message"]=>
      string(23) "Username already exists"
    }
  }
}

json_encodeに別のアイテムがある可能性があると予想されるため、これにより目的の出力が得られます$response['response']

デモ

編集 モデルは 1 次元配列を返す必要があります。例えば:

return array('complete'=>0,'error'=>1003, 'message'=>'Username already exists');

そして、すべてのエラー メッセージを保持している別の配列に割り当てる必要があります。

$data['data'][] = $this->logins_model->signup($post_data);
$this->load->view('json', $data);  

デモ 2

于 2013-05-24T14:26:57.103 に答える