※firefoxとwebkitで確認してます。
JSONを使ってデータをやり取りするととっても便利なのですが、最近それでハマったのでメモ。
UNICODEには、改行文字がいろいろと定義されているみたいです。
UAX #13: Unicode Newline Guidelines
その中の”LINE SEPARATOR (U+2028)”と”PARAGRAPH SEPARATOR (U+2029)”を含む文字列をJSONデータとしてデコードする際にeval関数を利用すると構文エラーが発生し、うまくパースできません。
テストコードはこんな感じ。
var plain_data = "{data: 'plain-data'}"; var ls_data = "{data: 'ls" + "\u2028" + "-data'}"; var ps_data = "{data: 'ps" + "\u2029" + "-data'}"; // これは普通にOK var d1 = eval('(' + plain_data + ')'); document.write( d1.data ); // LSが含まれているとNG var d2 = eval('(' + ls_data + ')'); document.write( d2.data ); // PSが含まれていてもNG var d3 = eval('(' + ps_data + ')'); document.write( d3.data );
解決策としては、evalにかける前に、
data.replace(/\u2028|\u2029/g, '');
等として、LS,PSを削除するまたは、LF等の別の改行コードに置き換えるのがよろしいかなと。
もしくは、jQueryのajax系のメソッドを利用すると問題なくパースしてくれるようです。