業務アプリ、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
- as3corelib-.92.zipをダウンロード
- as3corelib-.92.zipを解凍すると、as3corelib.swcというファイルがあります。
- as3corelib.swcをFlexBuilderのプロジェクト配下のlibフォルダにコピーします。
- import com.adobe.serialization.json.JSON;と記述。
- 今回はHTTPServiceを使用しています。urlプロパティに翻訳APIのurlを指定します。
- 正常終了時のイベントをハンドリングします(addEventListener(ResultEvent.RESULT, onResult))。
- 翻訳結果をデコードして、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で動いてます。
