as3corelibのJSONと改行コード

as3corelibのJSONクラスを使うと、ActionScript 3.0からJSONを手軽に扱えます。
…と、得意げに言ってみましたが、実はハマりました><
タイトルにもある通り、URLLoader#load等で得た文字列をJSON.decodeする時、改行コードがLFでないとパースエラーに見舞われます。

[追記]

現在(as3corelib-.92以降)はCRでもLFでもCRLFでも大丈夫です。
id:FLIP_FLOPさんにコメントを頂き、再検証しました。

なので、以下はcorelib-.90以前のバージョンにのみ該当します。

[/追記]
[Fault] exception, information=Error: Unexpected 
 encountered
Fault, parseError() at JSONTokenizer.as:546

JSONLintもスンナリ通るし、おっかしーなーと思いつつ、ためしに空白文字・改行文字を削ってみると、
スペースなし → NG
タブなし → NG
改行なし → OK
という結果。
もしや…と.jsonファイルの改行コードをCRLFからLFに変えたところ、OKでした。

手書きのJSONはあまり扱わないかもしれませんが、ちょっとテストしてみたい時などには不便ですね。
それに、様々なWeb APIJSONを吐き出す昨今、コード中にCRLFが含まれないとも限りません。
そこで、取得した文字列を置換することで対応しました。

ちなみに、自分が読んだ限りでは、JSONの仕様には改行コードに関することは明記されていませんでした(文字列リテラル内のエスケープ以外)。

いつものようにコード例を添えて覚書

まずは.json
// something.json

{
	"propA" : [0, 1],
	"propB": [
		[2, 3, 4],
		[5, 6, 7],
		[8, 9, 10]
	]
}
そして、.as。
// Main.as

package {
   import com.adobe.serialization.json.JSON;
   import flash.display.Sprite;
   import flash.events.Event;
   import flash.net.URLLoader;
   import flash.net.URLRequest;

   public class Main extends Sprite {
      private var jsonURL:String = 'json/something.json';
      private var obj:Object = {};

      public function Main():void {
         var urlRequest:URLRequest = new URLRequest(jsonURL);
         var urlLoader:URLLoader = new URLLoader();
         urlLoader.addEventListener(Event.COMPLETE, completeHandler);
         urlLoader.load(urlRequest);
      }

      private function completeHandler(event:Event):void {
         event.target.removeEventListener(event.type, arguments.callee);
         var urlLoader:URLLoader = event.target as URLLoader;
         var jsonString:String = (urlLoader.data as String).replace(/\r\n|\r/g, '\n');
         obj = JSON.decode(jsonString);
         trace(obj.propB[1]);
      }
   }
}

一連の流れが見えるように、まるまる書いてみました。
ポイントは、completeHandler内のvar jsonStringの行です。
これで、.jsonの改行コードはCR、LF、CRLFのどれでもOKになります。
取り込んだ後でテキストとして扱う必要がないのなら、別に\nにしなくても空文字列でよいですね><

参考サイト

JSON
JSONの仕様。非常に短く簡潔です。ページの先頭で言語を選べます(日本語もある)。
JSONLint - The JSON Validator
そのまんま、JSONの構文チェッカーです。
もう一度、ちゃんとJSON入門 - 檜山正幸のキマイラ飼育記 (はてなBlog)
JSON仕様の、見落としがちな部分+αが丁寧にまとめられた記事です。
初めてJSONを出力する側に立った方は必読!
Google Code Archive - Long-term storage for Google Code Project Hosting.
as3corelibのプロジェクトページです。JSON周り以外にも、ユーティリティクラスが満載!