業務アプリ、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で動いてます。