Преобразовать запрос codeigniter в json?
Я хочу преобразовать модельный запрос в json с помощью json_encode, он не работает. Но с обычным массивом.
$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.
Что-то, что я делаю неправильно, но вопрос в том, что?
Ответы
Ответ 1
Кажется, вы пытаетесь закодировать объект результата базы данных 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.
Причина, по которой вы получаете ошибку, пытающуюся закодировать объект результата, состоит в том, что она имеет переменную члена resource, которая не может быть закодирована в JSON. Эта переменная ресурса на самом деле является курсором в результирующий набор.
Ответ 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());
}
Ответ 3
В соответствии с последним стандартом CI используйте следующий код в файле вашего контроллера:
$this->output->set_content_type('application/json')->set_output(json_encode($arr));
Ответ 4
Вот рабочее решение:
$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);
Ответ 5
Модели (сообщение):
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"}]}