我有一个模型,它在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"
}
}
答案 0 :(得分: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);
答案 1 :(得分:0)
在您的视图中将$ post定义为数组并从那里删除方括号。要在视图中检查结果,请使用print_r而不是echo。这将准确显示检索到的数据量。