【问题标题】:Format json with CodeiGniter使用 CodeiGniter 格式化 json
【发布时间】:2021-09-01 03:56:50
【问题描述】:

我正在使用 codeigniter php,我需要创建一个 api rest,它返回一个包含书籍模型的数组,为此我在控制器中创建了一个名为 api2.php 的文件,在这里我输入了 rest 调用的返回发布,所以 api2.php 调用。问题是调用返回的json格式不正确,应该是另一种格式。

Json Now(不正确): https://gist.github.com/riccardopirani/8b41fe97896380e64b5df1f92f99b954

正确的 json:

{  
  [
     id: "2", 
     desc: "sss",
     ..
  ],
  [ 
      id: "3", 
     desc: "sss",
     ..

   ], 

}

控制器/Api2.php:

<?php

class Api2 extends CI_Controller {
    
    function __construct() {
        parent::__construct();
        $this->load->model('Book_model');
    }


    function index() {

        header('Content-Type: application/json');      
        $values = $this->Book_model->get_all_books();
        $book_list = [];
        
            foreach ($values as $row)
            {
                
                $book_list[$row['id']] = $row['id'];
                $book_list[$row['cat']] = $row['cat'];
                $book_list[$row['descrizione']] = $row['descrizione'];
                $book_list[$row['titolo']] = $row['titolo'];
                $book_list[$row['prezzo']] = $row['prezzo'];
                $book_list[$row['autore']] = $row['autore'];
                $book_list[$row['order']] = $row['order'];
            }
            echo json_encode($book_list);

        }
}

模型/Book_model.php:

<?php

class Book_model extends CI_Model
{
    function __construct()
    {
        parent::__construct();
    }
    
    /*
     * Get book by id
     */
    function get_book($id)
    {
        return $this->db->get_where('books',array('id'=>$id))->row_array();
    }
        
    /*
     * Get all books
     */
    public function get_all_books()
    {
        $this->db->order_by('id', 'desc');
        return $this->db->get('books')->result_array();
    }
    

    /*
     * function to add new book
     */
    function add_book($params)
    {
        $this->db->insert('books',$params);
        return $this->db->insert_id();
    }
    
    /*
     * function to update book
     */
    function update_book($id,$params)
    {
        $this->db->where('id',$id);
        return $this->db->update('books',$params);
    }
    
    /*
     * function to delete book
     */
    function delete_book($id)
    {
        return $this->db->delete('books',array('id'=>$id));
    }
}

【问题讨论】:

    标签: php json codeigniter codeigniter-3


    【解决方案1】:

    您的错误表明它需要一个对象的结果,该对象具有名为 renderers 但未定义的属性,因此如果您没有调试 js 代码的经验并更改相应的预期结果:

    $values = $this->Book_model->get_all_books();
    
    $this->output->set_header("Access-Control-Allow-Origin: *");
    $this->output->set_content_type('application/json');
    $this->output->set_output(json_encode(["renderers" => $values]));
    

    【讨论】:

    【解决方案2】:

    将数据解析成数组,并作为json处理

    function index() {
            header('Content-Type: application/json');
            //print link element
            /*$array = array(
                "foo" => "bar",
                "bar" => "foo",
            );*/
            $values = $this->Book_model->get_all_books();
            book_list = [];
            
                foreach ($values as $row)
                {
                    $book_list[$row['id']] = $row['id'];
                    $book_list[$row['desc']] = $row['desc'];
                }
               return $book_list;
               echo json_encode($book_list);
        }
    

    【讨论】:

    【解决方案3】:

    使用Output类回显json内容

    function index() {
       $values = $this->Book_model->get_all_books();
       $this->output
            ->set_content_type('application/json')
            ->set_output(json_encode($values));
    }
    

    【讨论】:

    • 用你的解决方案我有这个错误:gist.github.com/riccardopirani/8e8aad202c8d05633d113fc380a8343e
    • 这是我现在的数组,但不正确。 gist.github.com/riccardopirani/5229f1e2a68e1cc753faf268edadab46 –
    • @riki,我不明白你的意思。我的方法直接呼应了 API 调用的内容。您之前的 index() 函数有错误,可以简化为我发布的内容。你刚才发的那个链接是什么?此外,您的初始错误与installHook.js 有关,您的问题未解决。
    • @riki - 你能告诉我产生错误的代码吗? (查看文件)我知道问题出在哪里,但需要查看该页面
    • 上面没有错误,json格式不正确
    猜你喜欢
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多