PHPはJSONの空オブジェクトに弱い

今日はPHPの話。
文字列のjsonをデコードしてエンコードする簡単なお仕事。

<?php
$raw = '{"hoge":{}}';// 空オブジェクト
$map = json_decode($raw, true);
$result = json_encode($map);

echo($result);// 元どおり {"hoge":{}} になることを期待する

最後のecho$rawと同じで

'{"hoge":{}}'

になると思うじゃん。
でも実際はこれ。

{"hoge":[]}

空オブジェクトが空配列になってるーーー!!!

だってPHP連想配列もarrayだもん

考えてみれば当たり前で、phpにmap型はなく全てarrayで表現されるから、空オブジェクトを表現したjsonをデコードしたらarrayになって、それをjsonエンコードしたらそのままarrayになる。

今日はマジでこれにハマった。。つらい。。