2012年07月07日
川俣晶の縁側ソフトウェア技術雑記 total 3595 count

JSONとJSONPの意外な違い

Written By: 川俣 晶連絡先

「JSONとJSONPの意外な違いに遭遇した」

「知ってるよ。読み込み方が違うんだ」

「そこじゃない」

「えっ?」

「結局、JSONは文字列として読み込んでeval関数で評価するけど、JSONPは直接読み込んでJavaScriptコードとして評価する」

「うん。そうだよね」

「では最低限の構文の違いを除くと両者は同じなのか」

「うーん。JSONデータの前後にちょっと文字を書き足すとJSONPになるわけだろ?」

「そう。その通り。しかし、その場合に意外な違いが発生することに気づいた。しかも小さなテストデータでは分からない違いだ」

「それはなんだい?」

「安全な文字でエンコードされたバイナリーデータを含む巨大なデータを入れたとき、JSONPなら読めるのに、JSONだと読めないつまりeval関数経由ではエラーになるケースに遭遇した」

「えー」

「このことは言い換えれば、JavaScriptインタプリタの式評価部分とeval関数の動作は等価では無いことを意味する」

「本当に? IEだけってことはないの?」

「試したらSafariとFirefoxでも同じだった」