将codeigniter查询转换为json?

问题描述 投票:14回答:5

我想用json_encode将模型查询转换为json,它不起作用。但是使用普通阵列确实如此。

 $arr = array("one", "two", "three");
       $data["json"] = json_encode($arr);

产量

 <?php echo "var arr=".$json.";"; ?>
 var arr=["one","two","three"];

但是当我尝试转换查询时,codeigniter会抛出错误。那是什么意思?这是错误消息:

遇到PHP错误严重性:警告消息:[json](php_json_encode)类型不受支持,编码为null

转换后的“查询”结果=我的意思是模型方法是这样的:

{"conn_id":null,"result_id":null,"result_array":[],"result_object":[],"current_row":0,"num_rows":9,"row_data":null} 

我试着这样做

 $posts = $this->Posts_model->SelectAll();
       $data["posts"] = json_encode($posts); 

顺便说一句,当我没有json_encode时,模型和方法工作得很好。

我可能做错了什么,但问题是什么?

json codeigniter
5个回答
24
投票

您似乎正在尝试编码CodeIgniter数据库结果对象而不是结果数组。数据库结果对象充当游标到结果集的包装器。您应该从结果对象中获取结果数组,然后对其进行编码。

您的模型代码似乎是这样的:

function SelectAll()
{
    $sql = 'SELECT * FROM posts';
    // Return the result object
    return $this->db->query($sql);
}

它应该更像是这样的:

function SelectAll()
{
    $sql = 'SELECT * FROM posts';
    $query = $this->db->query($sql);
    // Fetch the result array from the result object and return it
    return $query->result();
}

这将返回一个可以用JSON编码的对象数组。

您尝试编码结果对象时出错的原因是因为它有一个无法用JSON编码的resource成员变量。该资源变量实际上是进入结果集的游标。


2
投票
public function lastActivity()
{
    header("Content-Type: application/json");
    $this->db->select('*');
    $this->db->from('table_name');
    $query = $this->db->get();

    return json_encode($query->result());
}

1
投票

根据最新的CI标准,在控制器文件中使用以下代码:

$this->output->set_content_type('application/json')->set_output(json_encode($arr));

0
投票

型号(邮政):

function SelectAll()
{
   $this->db->select('*');
   $this->db->from('post');
   $query = $this->db->get();
   return $query;
}

控制器:

$data['post'] = $this->post->SelectAll()->result_array();
echo json_encode($data);

结果:

{"post":[{"id":"5","name":"name_of_post"}]}

0
投票

这是工作解决方案:

            $json_data = $this->home_model->home_getall();
            $arr = array();
            foreach ($json_data as $results) {
            $arr[] = array(
                   'id' => $results->id,
                   'text' => $results->name
                    );
            }
         //save data mysql data in json encode format       
          $data['select2data'] = json_encode($arr);
© www.soinside.com 2019 - 2024. All rights reserved.