株式会社ライブキャストロゴ 株式会社ライブキャスト

業務アプリ、Webサービス問わずデータ交換する場面っていろいろありますよね。XML、YAML、JSON、・・・、CSVなどなど。なかでもJSONは軽量でECMA-262, revision3(ECMAScript)準拠のJavaScriptをベースとしているので、JavaScriptで簡単に読み込むことが可能で、Ajax分野で広く普及しているデータ記述言語です。

今回はJSONをActionScript3.0で読み込む方法をご紹介します。

※ 開発にはFlexBuilder3.0を使用しています。

as3corelibを使うと本当に簡単に実装できちゃいます。
as3corelib – Google Code

このライブラリはJSON読込以外にもいろいろできるのですが、その他の使い方は後日ということで。

JSON形式のファイルを用意してただ読み込むのじゃ芸がないので、今回はFlex関連の記事でなにかと見かけることの多い、googleの翻訳APIを利用することにしました。
Class Reference for Translation API – Google AJAX Language API – Google Code

結果がJSONで返りますので、ちょうどいいや。
実行結果はこちら。
http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=hello%20world&langpair=en%7Cja

  1. as3corelib-.92.zipをダウンロード
  2. as3corelib-.92.zipを解凍すると、as3corelib.swcというファイルがあります。
  3. as3corelib.swcをFlexBuilderのプロジェクト配下のlibフォルダにコピーします。
  4. import com.adobe.serialization.json.JSON;と記述。
  5. 今回はHTTPServiceを使用しています。urlプロパティに翻訳APIのurlを指定します。
  6. 正常終了時のイベントをハンドリングします(addEventListener(ResultEvent.RESULT, onResult))。
  7. 翻訳結果をデコードして、Objectに突っ込むだけ。

こんな感じで使います。

package
{
import com.adobe.serialization.json.JSON;

import flash.net.URLVariables;

import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.rpc.http.HTTPService;

public class TranslateService extends HTTPService
{
private var _model:TranslateModel;
private var _controller:TranslateController;

public function TranslateService(rootURL:String=null, destination:String=null)
{
super(rootURL, destination);
}

public function initService():void {
this.method = "post";
this.url = "http://ajax.googleapis.com/ajax/services/language/translate";
this.addEventListener(ResultEvent.RESULT, onResult);
this.addEventListener(FaultEvent.FAULT, onFault);
}

private function Translate(v:String, q:String, languageFrom:String, languageTo:String):void {
var forms:URLVariables = new URLVariables();
forms.v = v;
forms.q = q;
forms.langpair = languageFrom + "|" + languageTo;
this.request = forms;
this.send();
}

private function onResult(event:ResultEvent):void {
var json:Object = JSON.decode(event.result.toString());
if (json.responseStatus == 200) {
 trace(json.responseData.translatedText);
}
else {
 trace("翻訳失敗...");
}
}

private function onFault(event:FaultEvent):void {
trace("翻訳失敗...n" + event.fault.message);
}
}
}

勢いで、サンプルアプリ作ってみました。画面イメージはこんな感じです。

サンプルアプリはここで確認できます。
google翻訳APIの翻訳結果JSONを読み込むswf
ソースは近日公開!?

※ 当時ダウンロードしたversionはcorelib-.85.zipでした。サンプルアプリもこのversionで動いてます。