Во многих веб-фреймворках он закодирован не так, как вы говорите.
{'foo': [1], 'bar': [2, 3], 'fred': 4}
будет:
?foo[]=1&bar[]=2&bar[]=3&fred=4
Причина, по которой ответы в массиве должны отличаться от простых ответов, заключается в том, что слой декодирования может автоматически отличать менее распространенный случай foo (у массива, который просто имеет один элемент) с чрезвычайно распространенным случаем fred (один элемент).
Эта запись может быть экстраполирована на:
?highlight_mode[7]=blue&highlight_mode[9]=yellow
когда у вас есть хеш, а не просто массив.
Я думаю, это в значительной степени то, что делают Rails и большинство фреймворков, которые копируют из Rails.
Пустые массивы, пустые хэши и отсутствие скалярного значения выглядят одинаково в этой кодировке, но с этим мало что можно поделать.
Это [], кажется, вызывает лишь несколько огненных войн. Некоторые считают это ненужным, потому что браузер, транспортный уровень и кодировщик строки запроса не заботятся. Единственное, что волнует, это автоматический декодер строки запроса. Я поддерживаю Rails способ использования []. Альтернативой может быть использование отдельных методов для извлечения скаляра и извлечения массива из строки запроса, поскольку нет автоматического способа определить, когда программа хочет [1], когда она хочет 4.