monthly gimite

試験運用中。

prototype.jsとChrome/Firefox組み込みのJSON.stringifyが衝突する

最近のChromeFirefoxJSONオブジェクトが標準付属してるっぽいのですが、それとprototype.jsが干渉してJSON.stringifyの挙動がおかしくなるようです。

prototype.js 1.6.1をロードした状態で

JSON.stringify({"a": ["b", "c"]})

とすると '{"a":"[\"b\", \"c\"]"}' が返ってきます。配列の部分が二重にJSON化されています。

このへんによるとprototype.jsJSONオブジェクトが同じObject#toJSON()という名前を違う用途で使っているのが問題らしいです。

まあ今時prototype.jsなんて使うなよ、っていう話なのかもしれませんが。いい加減jQueryでも覚えようかな…。

ちなみにjson2.jsは組み込みのJSON実装があればそちらを使うようになっています。なのでjson2.jsを使っていても同じ問題が起きるので注意*1

*1:json2.js自身の実装でも同様なのかもしれませんが未確認。