【问题标题】:Changing the output of json_encode in Codeigniter [duplicate]在 Codeigniter 中更改 json_encode 的输出 [重复]
【发布时间】:2013-09-19 22:49:05
【问题描述】:

我正在从 controller 中的 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 : {....} }

基本上我想去掉方括号。

我可以在我的代码中进行哪些更改以获得预期的输出?

【问题讨论】:

  • 如果不知道Usermodell::getById 方法的作用,就很难说清楚。从 json 输出中,您似乎得到了一个带有编号键的数组(例如数据库查询中的多行),而不是您期望的单行。 var_dump($data['user']) 长什么样子?
  • 让我编辑它以提供更多信息。

标签: php codeigniter


【解决方案1】:

您在单个“用户”对象周围看到额外的[] 的原因是getById() 方法中的$data[] 数组。您正在返回一个包含其他数组的数组,默认情况下json_encode 会将数字索引数组(从 0 开始)转换为 javascript 数组。

现在这取决于您在这里的意图是什么。如果您想返回一个用户列表,即使它只有一个元素,但强制包含单个用户对象的列表作为 json 输出中的一个对象,您可以使用JSON_FORCE_OBJECT 选项,例如:

json_encode($data, JSON_FORCE_OBJECT);

但是从您的代码来看,您只想返回实际的用户对象而不是它的列表,因此您可以修改 getById() 方法以在 db 结果上返回带有 ->row() 的那个,或者您可以获取从方法返回的第一个对象:

...->getById(...)[0]; // for php 5.4+

 reset(...->getById()); // for older versions

【讨论】:

  • 我尝试使用 JSON_FORCE_OBJECT,但由于某种原因它不起作用。
  • 此外,即使我想返回所有对象,而且没有[],我还能做出什么改变?
【解决方案2】:

换行试试

$data['user'] = $this -> usermodel -> getById($this->uri->slash_segment(3));

有了这个

$data['user'] = $this -> usermodel -> getById($this->uri->slash_segment(3))[0];

[{ ... }] 是一个包含单个对象的数组。 [0] 应该抓取该数组中的第一个元素,而不是数组本身。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-01
    • 2013-12-08
    相关资源
    最近更新 更多