1

クエリ結果セットを json_encode でエコーすると、各オブジェクトの前に結果行の番号が取得される理由がわかりません。返される行の合計数を数えて、JSON 文字列の先頭に 1 回だけ表示し、その後は行だけを返したいだけです。つまり、次のコードを使用します。

               //...active record query
               $result = $this->db->get();

                $data = array();

                $count = 1;

                foreach($result->result() as $row)
                {
                    $data['count'] = $count;
                    $entry = array();
                    $entry['firstname'] = $row->first_name;
                    $entry['lastname'] = $row->last_name;
                    $entry['jobtitle'] = $row->title;
                    $entry['dept'] = $row->dept_name;
                    $entry['deptid'] = $row->dept_no;

                    if($row->emp_no == null)
                    {
                        $entry['ismanager'] = 0;
                    }
                    else
                    {
                        $entry['ismanager'] = 1;
                    }
                    $data[] = $entry;
                    $count++;
                }

                return $data;

そして、コントローラーでjson_encodeすると、次のようになります。

{"count":35,"0":{"firstname":"Georgi","lastname":"Facello","jobtitle":"Senior Engineer","dept":"Development","deptid":"d005","ismanager":0},"1":{"firstname":"Kirk","lastname":"Facello","jobtitle":"Senior Engineer","dept":"Development","deptid":"d005","ismanager":0},....rest of the query results

私が望まないのは、行の結果の前の"0"andなどです。"1"返された結果の合計数は既にあるので、個々の行番号は必要ありません。

誰かが親切に私を助けてくれたら、感謝します。

4

2 に答える 2

1

配列を JSON としてシリアル化しようとすると、次のようになります。

[elem1, elem2, elem3, ...]

ただし、その「配列」に他のフィールドがある場合は、オブジェクトとしてシリアル化されます。

{"field":value, "0":elem1, "1":elem2, "2":elem3, ...}

field配列構文を使用してシリアル化する方法json_encodeはなく、単に破棄することもできないため、オブジェクト構文を使用します。ドキュメントに記載されているように:

ノート:

配列をエンコードするときに、キーが 0 から始まる連続した数値シーケンスでない場合、すべてのキーは文字列としてエンコードされ、キーと値のペアごとに明示的に指定されます。

これに対する考えられる回避策は、要素のリストからカウントを分離することです。

$data = array();
$list = array();
$data['list'] = list;

$count = 1;
foreach($result->result() as $row)
{
    $data['count'] = $count;
    $entry = array();
    ...
    $list[] = $entry;
    $count++;
}

それは次のようなものにシリアライズされます:

{"count":35,"list":[{"firstname":"Georgi","lastname":"Facello","jobtitle":"Senior Engineer","dept":"Development","deptid":"d005","ismanager":0},{"firstname":"Kirk","lastname":"Facello","jobtitle":"Senior Engineer","dept":"Development","deptid":"d005","ismanager":0},....rest of the query results]}
于 2012-12-19T21:43:34.613 に答える
0

常に数値インデックスをプロパティとして表示するために使用JSON_FORCE_OBJECTしている可能性があるようです。質問であなたのステップjson_encodeを示す必要があります。json_encode

オプションをオフにしてデフォルトのエンコーディングを使用する場合でも、有効な JSON を作成するために、数値インデックス付き配列を独自のプロパティにネストする必要があります。そうしないと、数値インデックスがプロパティとして表示されます。行をオブジェクトに割り当てるときに、おそらく次のようにします。

$data['records'][] = $entry;
于 2012-12-19T21:44:16.283 に答える