Почему PHP-функция «json_encode» применяется для неассоциативного массива с отсутствующим первым элементом, считает второй ключ как строку?

Давайте начнем с двух небольших тестов:


$original = [0 => 'a', 1 => 'b']; var_dump((json_decode(json_encode($original)))); 

возвращается

 array(2) { // array [0]=> // integer like original string(1) "a" [1]=> // integer like original string(1) "b" } 

Таким образом, мы можем видеть здесь, что параметр- assoc параметр (второй параметр в функции json_decode ) не установлен (по умолчанию – false ), а пара json_decode-json_encode восстанавливает оригинал, как следует.


 $original = [1 => 'a', 2 => 'b']; var_dump((json_decode(json_encode($original)))); 

возвращается

 object(stdClass)#1 (2) { // object ["1"]=> // string, instead of integer string(1) "a" ["2"]=> // string, instead of integer string(1) "b" } 

Здесь снова assoc false , но пара json_decode-json_encode не может восстановить оригинал, если мы явно не установим значение assoc в true .


Вопрос: Я работаю над пользовательским процессом сериализации (отличным от функций serialize и unserialize PHP). Я решил использовать json_decode-json_encode и я обнаружил, что не могу полагаться на настройки по умолчанию, например, assoc=false . json_ ли вы о каких-либо других json_ с json_ семейства json_ которые могут привести к возникновению проблемы, когда я не смогу восстановить исходные данные и структуру?