FlashPlayer11 JSONクラス


FlashPlayer11が公開され、新機能として進化した表現力に注目が集まっています。
ただ、今回のアップデートでは目に見えない地味な部分も追加されています。
その1つとしてトップレベルに追加された「JSONクラス」を使ってみました。

これまでFlashでJSONを扱うには自前で変換できるソースを用意するか、
as3corelibといったライブラリを利用する必要がありました。
今回追加されたJSONクラスの使い方は非常に簡単です。
トップレベルのクラスですから、importも必要ありません。

・FlashのオブジェクトをJSONに変換

[sourcecode language=”as3″]
var json:String;
var obj:Object;

obj = { a:0, b:’あ’, c:[0, 1, 2], d: { e:’f’ }};
json = JSON.stringify(obj);
[/sourcecode]

・JSONをFlashのオブジェクトへ変換

[sourcecode language=”as3″]
var json:String’;
var obj:Object;

json = ‘{"d":{"e":"f"},"a":0,"b":"あ","c":[0,1,2]}’;
obj = JSON.parse(json);
[/sourcecode]

どちらも非常にシンプルなソースで行えます。
また、処理にかかる時間も高速です。
特にJSON→Flashオブジェクトの処理を実行するJSON.parse()関数が
as3corelibのJSON.decode()関数に比べて、スピードに大分差が出ます。

[sourcecode language=”as3″]
obj = [
{
A:[
{ A0: { a:0, b:’あ’, c:[0, 1, 2], d: { e:’f’ }}},
{ A1: { a:1, b:’い’, c:[0, 1, 2], d: { e:’f’ }}},
{ A2: { a:2, b:’う’, c:[0, 1, 2], d: { e:’f’ }}},
{ A3: { a:3, b:’え’, c:[0, 1, 2], d: { e:’f’ }}},
{ A4: { a:4, b:’お’, c:[0, 1, 2], d: { e:’f’ }}}
],
B:[
{ B0: { a:0, b:’あ’, c:[0, 1, 2], d: { e:’f’ }}},
{ B1: { a:1, b:’い’, c:[0, 1, 2], d: { e:’f’ }}},
{ B2: { a:2, b:’う’, c:[0, 1, 2], d: { e:’f’ }}},
{ B3: { a:3, b:’え’, c:[0, 1, 2], d: { e:’f’ }}},
{ B4: { a:4, b:’お’, c:[0, 1, 2], d: { e:’f’ }}}
],
// 以下省略
[/sourcecode]

この様なオブジェクトを実行した際の結果が下記になります。

Get Adobe Flash player


ステージ上部に設けられたテキストフィールドにJSONを入力し、Pushボタンを押下するとステージ下部のテキストフィールドに処理時間とオブジェクト構造が表示されます。
例:
Native:5ms FlashPlayer11で追加されたJSONクラスでパースした時間(ミリ秒)
CoreLib:128ms as3corelibのJSONクラスでパースした時間(ミリ秒)

fps30で作成したFlashで上記のようなボリュームのデータをパースした際、
アニメーションのフレームレートに及ぼす影響などを考えると
地味ですが大きな一歩といえるのではないでしょうか?