次の2つのJSONがある。
{"0":{"a":1,"b":2},"1":{"a":1,"b":2},"3":{"a":1,"b":2}}
[{"a":1,"b":2},{"a":1,"b":2},{"a":1,"b":2}]
後者を期待していて、前者に遭遇して困ったのでメモ。
PHPでarrayから要素を削除を参考に、unsetで要素を削除してjson_encodeをしたら前者のJSONが生成されて困った。
unsetでarray要素で歯抜けができた状態で、json_encodeをするとJSONが配列になり、歯抜けを解消すると、オブジェクトになる。
$array = array();
って配列があって、その配列にインスタンスを格納してあるとして、次の処理をする。
json_encode($array);
unset($array[2]);
json_encode($array);
array_values($array);
json_encode($array);
と3つJSONを出力すると、次のようになる。
[{"a":1,"b":2},{"a":1,"b":2},{"a":1,"b":2},{"a":1,"b":2}]
{"0":{"a":1,"b":2},"1":{"a":1,"b":2},"3":{"a":1,"b":2}}
[{"a":1,"b":2},{"a":1,"b":2},{"a":1,"b":2}]
歯抜けの配列と、連番の配列だとjson_encodeの結果に差がでることになかなか気づかなくて時間を無駄にした。