[英]Changing the output of json_encode in Codeigniter
我正在这样从控制器中的 MySQL数据库以JSON
格式输出数据,
function byId(){
$this -> load -> model('usermodel');
$data['user'] = $this -> usermodel -> getById($this->uri->slash_segment(3));
$this -> output -> set_content_type('application/json');
$this -> output -> set_output(json_encode($data));
}
模型:
function getById($id){
$this->db->select('*');
$this->db->from('members');
$this->db->where('id', $id);
$q = $this -> db -> get();
if ($q -> num_rows() > 0) {
foreach ($q->result() as $row) {
$data[] = $row;
}
return $data;
}
}
它输出这样的数据,
{"user":[{"id":"3","firstname":"Frances","lastname":"Johnson","address":"489 Summit Lane","state":"Minnesota","country":"US","email":"fjohnson@teklist.net","phone":null,"experience":"2","designation":"Script"}]}
但是我需要这样
{user : {....} }
基本上我想摆脱方括号。
我可以更改代码中的哪些内容以获得预期的输出?
您在单个“用户”对象周围看到额外的[]
的原因是由于getById()
方法中的$data[]
数组。 您将返回一个数组,其中包含其他数组,并且默认情况下json_encode
会将数字索引数组(从0开始)转换为javascript数组。
现在,这取决于您的意图。 如果您想要返回一个用户列表,即使该列表具有一个元素,但是将包含单个用户对象的列表强制作为json输出中的对象,则可以使用JSON_FORCE_OBJECT
选项,例如:
json_encode($data, JSON_FORCE_OBJECT);
但是从您的代码来看,您只想返回实际的用户对象而不是它的列表,因此您可以修改getById()
方法以在数据库结果中使用->row()
返回该对象,也可以抓取从方法返回的第一个对象,其内容为:
...->getById(...)[0]; // for php 5.4+
要么
reset(...->getById()); // for older versions
尝试更换线
$data['user'] = $this -> usermodel -> getById($this->uri->slash_segment(3));
有了这个
$data['user'] = $this -> usermodel -> getById($this->uri->slash_segment(3))[0];
[{ ... }]
是一个包含单个对象的数组。 [0]
应该获取该数组中的第一个元素,而不是数组本身。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.