0

このようにコントローラーJSONでMySQLデータベースからフォーマットでデータを出力していますが、

function byId(){
        $this -> load -> model('usermodel');
        $data['user'] = $this -> usermodel -> getById($this->uri->slash_segment(3));
        $this -> output -> set_content_type('application/json');
        $this -> output -> set_output(json_encode($data));
    }

モデル:

function getById($id){
        $this->db->select('*');
        $this->db->from('members');
        $this->db->where('id', $id);

        $q = $this -> db -> get();

        if ($q -> num_rows() > 0) {
            foreach ($q->result() as $row) {
                $data[] = $row;
            }
            return $data;
        }

    }

このようなデータを出力します。

{"user":[{"id":"3","firstname":"Frances","lastname":"Johnson","address":"489 Summit Lane","state":"Minnesota","country":"US","email":"fjohnson@teklist.net","phone":null,"experience":"2","designation":"Script"}]}

しかし、私はこのようにそれを必要とします、

{user : {....} }

基本的に、角かっこを取り除きたいです。

意図した出力を得るために、コードで何を変更できますか?

4

2 に答える 2

1

[]個々の「ユーザー」オブジェクトの周りに余分なものが表示される理由は$data[]、メソッド内の配列のためgetById()です。内部に他の配列を含む配列を返します。デフォルトでjson_encodeは、数値でインデックス付けされた配列 (0 から始まる) を JavaScript 配列として変換します。

ここであなたの意図が何であるかによって異なります。要素が 1 つある場合でもユーザーのリストを返したいが、json 出力のオブジェクトとして個々のユーザー オブジェクトを含むリストを強制する場合は、次のJSON_FORCE_OBJECTようなオプションを使用できます。

json_encode($data, JSON_FORCE_OBJECT);

しかし、あなたのコードから判断すると、実際のユーザーオブジェクトをリストではなく返したいだけなので、メソッドを変更getById()->row()てデータベースの結果でそれを返すか、メソッドから返された最初のオブジェクトを取得することができます:

...->getById(...)[0]; // for php 5.4+

また

 reset(...->getById()); // for older versions
于 2013-09-15T20:30:53.437 に答える
0

ラインを交換してみる

$data['user'] = $this -> usermodel -> getById($this->uri->slash_segment(3));

これとともに

$data['user'] = $this -> usermodel -> getById($this->uri->slash_segment(3))[0];

[{ ... }]単一のオブジェクトを含む配列です。[0]配列自体ではなく、その配列の最初の要素を取得する必要があります。

于 2013-09-15T20:13:15.267 に答える