prototype.jsとChrome/Firefox組み込みのJSON.stringifyが衝突する
最近のChromeやFirefoxはJSONオブジェクトが標準付属してるっぽいのですが、それとprototype.jsが干渉してJSON.stringifyの挙動がおかしくなるようです。
prototype.js 1.6.1をロードした状態で
JSON.stringify({"a": ["b", "c"]})
とすると '{"a":"[\"b\", \"c\"]"}' が返ってきます。配列の部分が二重にJSON化されています。
このへんによるとprototype.jsとJSONオブジェクトが同じObject#toJSON()という名前を違う用途で使っているのが問題らしいです。
まあ今時prototype.jsなんて使うなよ、っていう話なのかもしれませんが。いい加減jQueryでも覚えようかな…。
ちなみにjson2.jsは組み込みのJSON実装があればそちらを使うようになっています。なのでjson2.jsを使っていても同じ問題が起きるので注意*1。
*1:json2.js自身の実装でも同様なのかもしれませんが未確認。