Функция JSON.stringify (), определенная в ECMAScript 5 и выше (стр. 201 - объект JSON, псевдокод стр. 205) , использует функцию toJSON (), когда она доступна для объектов.
Поскольку Prototype.js (или другая используемая вами библиотека) определяет функцию Array.prototype.toJSON (), массивы сначала преобразуются в строки с использованием Array.prototype.toJSON (), а затем строка, заключенная в кавычки JSON.stringify () отсюда и неверные дополнительные кавычки вокруг массивов.
Таким образом, решение является простым и тривиальным (это упрощенная версия ответа Рафаэля Швейкера):
delete Array.prototype.toJSON
Это, конечно, создает побочные эффекты для библиотек, которые полагаются на свойство функции toJSON () для массивов. Но я считаю это незначительным неудобством, учитывая несовместимость с ECMAScript 5.
Следует отметить, что объект JSON, определенный в ECMAScript 5, эффективно реализован в современных браузерах, и поэтому наилучшим решением является соответствие стандарту и изменение существующих библиотек.