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

当您替换$response['response'] = $data;$response['response'] = array($data);您想要在 json 中转换的数据结构时,它将变为:

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

这将为您提供所需的输出,因为json_encode预计$response['response'].

演示

编辑 您的模型应该返回一维数组。例如:

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 回答
0

在您的视图中,将 $post 定义为一个数组并从那里删除方括号。要在视图中检查结果,请使用 print_r 而不是 echo。这将准确显示检索到的数据量。

于 2013-05-24T14:30:20.753 回答