2010-03-09 14 views
12

Quiero convertir una consulta de modelo a json con json_encode, no funciona. Pero con una matriz ordinaria sí lo hace.¿Convertir la consulta codeigniter a json?

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

salida

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

Pero cuando intento convertir un CodeIgniter consulta genera un error. ¿Qué pasa con eso? Este es el mensaje de error:

A PHP Error Se encontró Gravedad: mensaje de advertencia: [json] tipo (php_json_encode) no es compatible, codificado como nulo

Y la "consulta convertido "número = me refiero método de modelo es la siguiente:

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

trato de hacer como esto

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

Por cierto, el modelo y el método funcionan bien cuando lo hago sin json_encode.

Algo Estoy haciendo mal, pero la pregunta es ¿qué?

+0

Se puede publicar el código que no funciona? No entiendo por qué querrías convertir tu consulta a json. ¿No deberías convertir los datos resultantes a json? –

+0

Si algo arroja un error, es posible que desee compartir el error con nosotros. ;-) –

+0

¿Puede por favor publicar el mensaje de error? – Pedro

Respuesta

22

Parece que está intentando codificar el objeto de resultado de la base de datos CodeIgniter en lugar de la matriz de resultados. El objeto de resultado de la base de datos actúa como un contenedor alrededor del cursor en el conjunto de resultados. Debería obtener la matriz de resultados del objeto de resultado y luego codificar eso.

Su código de modelo parece ser algo como esto:

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

Debería ser de la misma familia:

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

Esto devolverá una matriz de objetos que se pueden codificar en JSON.

El motivo por el que recibe un error al intentar codificar el objeto resultante es porque tiene una variable de miembro resource que no se puede codificar en JSON. Esta variable de recurso es realmente el cursor en el conjunto de resultados.

+0

Muchas gracias. Soy un poco nuevo en codeigniter, me queda mucho para aprender que es API, pero ahora es aún más divertido. – marko

+0

No hay problema. Encantado de ayudar :-) –

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

Aquí está la solución de trabajo:

  $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

Modelos (posteriores):

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

Controladores:

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

Resultado:

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

Según último estándar CI utilizar el siguiente código en el archivo de controlador:

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