Преобразовать запрос codeigniter в json? - PullRequest
14 голосов
/ 10 марта 2010

Я хочу преобразовать запрос модели в json с помощью json_encode, он не работает. Но с обычным массивом это так.

 $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.

Что-то я ошибаюсь, но вопрос в том, что?

Ответы [ 5 ]

24 голосов
/ 11 марта 2010

Вы, кажется, пытаетесь закодировать объект результата базы данных 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 голосов
/ 31 января 2016
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 голос
/ 29 декабря 2017

В соответствии с последним стандартом CI используйте следующий код в файле вашего контроллера:

$this->output->set_content_type('application/json')->set_output(json_encode($arr));
0 голосов
/ 23 апреля 2017

Модели (Пост):

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 голосов
/ 27 февраля 2017

Вот рабочее решение:

            $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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...