JSONパーサーがUNICODE文字列をデコードしてくれない

Rubyだと、

> str='{"message":"\u30ed\u30b0\u30a4\u30f3\u3057\u307e\u3057\u305f","status":"succeed"}'
 => "{"message":"\\u30ed\\u30b0\\u30a4\\u30f3\\u3057\\u307e\\u3057\\u305f","status":"succeed"}"
>   JSON.parse(str)
 => {"message"=>"ログインしました", "status"=>"succeed"}

このようにparseすると、unicode記法の文字列を
ちゃんと日本語に変換してくれるんだけど、
Flash Builderでas3corelibのJSON parserをつかってやってみると、

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
					   xmlns:s="library://ns.adobe.com/flex/spark" 
					   xmlns:mx="library://ns.adobe.com/flex/mx" width="385" height="108">

	<fx:Script>
		<![CDATA[
			import com.adobe.serialization.json.JSON;			
			protected function button1_clickHandler(event:MouseEvent):void
			{
				var str:String='{"message":"\u30ed\u30b0\u30a4\u30f3\u3057\u307e\u3057\u305f","status":"succeed"}';
				var json:Object=JSON.decode(str);
				label.text=json.message;				
			}
		]]>
	</fx:Script>
	<fx:Declarations>
		<!-- 非ビジュアルエレメント (サービス、値オブジェクトなど) をここに配置 -->
	</fx:Declarations>
	<s:Button x="10" y="10" label="変換" click="button1_clickHandler(event)"/>
	<s:Label x="10" y="39" fontSize="12" id="label"/>
</s:WindowedApplication>

これを実行してみると、

となり、全然日本語になってない。
どうも文字の構造だけをJSONに変換するだけのようです。
 
みなさんどうしているのでしょう?
XMLにしたほうがいいのかのう。。。

XMLパーサーだと日本語をデコードしてくれる

上のJSONパーサーだと日本語を作ってくれないのですが、
XMLだとどうかと思って実験してみました。

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
					   xmlns:s="library://ns.adobe.com/flex/spark" 
					   xmlns:mx="library://ns.adobe.com/flex/mx" width="385" height="108">

	<fx:Script>
		<![CDATA[
			import com.adobe.serialization.json.JSON;			
			protected function button1_clickHandler(event:MouseEvent):void
			{
				var str:String='<?xml version="1.0" encoding="UTF-8"?><hash><status>succeed</status><message>&#12525;&#12464;&#12452;&#12531;&#12375;&#12414;&#12375;&#12383;</message></hash>';
				var xml:XML=new XML(str);
				trace(xml.message);
				label.text=xml.message;
			}
		]]>
	</fx:Script>
	<fx:Declarations>
		<!-- 非ビジュアルエレメント (サービス、値オブジェクトなど) をここに配置 -->
	</fx:Declarations>
	<s:Button x="10" y="10" label="変換" click="button1_clickHandler(event)"/>
	<s:Label x="10" y="39" fontSize="12" id="label"/>
</s:WindowedApplication>

そうしたところ、

このようにちゃんと日本語がでました。

JSON JSONしているのはRuby on Rails関係だけで、
世の中的にはまだまだ普通はXMLだろ。って
ことなのかもしれません。
 
個人的にはJSONでいきたいんだけどな。
読みやすいし。短いし。

JSONパーサが悪いんだろうけど、どこが悪いのかわからなくなってきた

テストした文字列に問題があったみたいで、

'{"message":"\u30ed\u30b0\u30a4\u30f3\u3057\u307e\u3057\u305f","status":"succeed"}'

この\をちゃんとバックスラッシュにしたらうまくいった。
 
けど、結局何が悪いのかわかってない。
元の文字列が問題ではないというのは
なんとなくわかっているんだけど。

まさかとは思ったが、URLLoaderの仕様だったらしく、Responseの中身を書き換えていた

HTTPのリクエストを出して、その時に

{"message":"\u30ed\u30b0\u30a4\u30f3\u3057\u307e\u3057\u305f","status":"succeed"}

を出していたとすると、URLLoaderが
\(バックスラッシュ)を勝手に
[34]から[194,165]のコードに書き換えてしまうらしいです。
ちょっと表現があやしいので、コードを見ていただくと、

urlLoader.addEventListener(Event.COMPLETE,function(event:Event):void{
	var body:String=(event.target as URLLoader).data;
	var resultArray:Array=JSON.decode(body).parts;
	partList.source=new Array();
	for each(var item:Object in resultArray){
		partList.source.push(item.part.name);
	}					
});

こんなActionListenerでJSONを読んでいるのですが、
URLLoaderから.dataをしているタイミングなのかどこなのか
わからないのですが、\が原型から2バイトコード
変わっています。ですので、

urlLoader.addEventListener(Event.COMPLETE,function(event:Event):void{
	var body:String=(event.target as URLLoader).data;
	var body2:String=body.replace(new RegExp(/\/g),"\\");
	var resultArray:Array=JSON.decode(body2).parts;
	partList.source=new Array();
	for each(var item:Object in resultArray){
		partList.source.push(item.part.name);
	}					
});

こんな酷いコードを書くと、日本語に変換されました。
デバッグに時間がかかりましたね。
それで、原因はおそらくURLLoaderで
dataFormatをTEXTにしていると変換されるんでしょうね。
よけいな事をしれくれるものです。
BINARYにして、再挑戦してみます。