Меняется порядок элементов в массиве при передаче с сервера на клиент в формате json

Рейтинг: 2Ответов: 2Опубликовано: 15.04.2015

Всем привет Получаю из бд массив, отсортированный в нужном порядке. Кодирую в json_encode и отправляю на клиент, однако в браузере порядок другой(во всех кроме сафари) Смотрю массив до кодирования - правильный порядок, кодирую и отправляю - порядок уже другой

до

после после

Ответы

▲ 2Принят

В таком виде порядок сохранится

echo json_encode([[1=>1], [3=>3], [2=>2], [5=>5]]);
▲ 3

На самом деле порядок не меняется. Порядок меняет парсер, встроенный в браузер. json не предусматривает сохранение порядка аттрибутов в объектах. Для этого существует ordered list. В таком виде порядок сохранится.

[
    {key: val}, 
    {key1:val1}
]

Приведу пример, чтобы показать, что порядок меняет браузер

header('Content-Type: application/json');
echo json_encode([1=>1, 3=>3, 2=>2, 5=>5]);

Если посмотреть на ответ в формате raw (вкладка "ответ" в chrome dev tools), всё в том порядке, что я передал:

{"1":1,"3":3,"2":2,"5":5}

Но во вкладке "preview" или как у вас в "JSON". Парсер браузера изменил порядок.

1: 1
2: 2
3: 3
5: 5