json_encodeの落とし罠
ストーリー
特定の外部連携の処理で要求されているデータを模したものをsptatie/laravel-dataとLaravelのCollectionを使って実装していた。
連携先APIの仕様変更により、LaravelのCollectionを使って実装している項目をチャンクして送信する必要がでてきた。
チャンクして送信したところ、チャンクしたリクエストの2回目でエラーが発生した。
エラー内容はリクエストボディのバリデーションエラーであった。
概要
json_encodeには「配列のキーが 0 からはじまる連続した数値でなければ、 すべてのキーを文字列としてエンコードする」という仕様があるため、配列のキーが0から始まらない場合は再インデックスをしなければ配列としてエンコードされない。
それを配列として認識させたければ、array_valuesを行うことが必須であった。
配列をエンコードする場合、もし配列のキーが 0 からはじまる連続した数値でなければ、 すべてのキーを文字列としてエンコードします。 そして、個々のキー/値のペアを明示的に指定します。
なぜそのような仕様なのか
// TODO