2010-03-09 41 views
12

我想用json_encode将模型查询转换为json,但它不起作用。但是它有一个普通的阵列。将codeigniter查询转换为json?

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

输出

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

但是,当我尝试转换查询笨抛出一个错误。那是什么? 这是错误消息:

甲PHP错误遇到严重性: 警告信息:[JSON] (php_json_encode)类型不受支持, 编码为空

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

{"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的模型和方法工作得很好。

东西我可以做的错,但问题是什么?

+0

你能后不工作的代码?我不明白你为什么要把你的查询转换成json。你不应该将结果数据转换成json吗? –

+0

如果出现错误,您可能希望与我们分享错误。 ;-) –

+0

你可以请发布错误信息? – Pedro

回答

22

您似乎试图编码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成员变量。这个资源变量实际上是将光标放入结果集中。

+0

非常感谢。我对codeigniter很陌生,留下来学习它的API,但现在它更加有趣。 – marko

+0

没问题。乐意效劳 :-) –

1
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()); 
} 
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); 
0

模型(POST):

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"}]} 
1

按照最新CI标准用在你的控制器文件下面的代码:

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