FlashでJSONデータの受け取りとダブルクオーテーションの扱い
FlashでJSONデータを簡単に受け取れるようにするActionScriptのクラスファイルが配布されている。
http://www.designvox.com/~trannie/JSON/
JSON形式のデータはXMLよりシンプルな構造なので、いちいちXMLを読み込んで解析してー、というようなのが面倒で不要な場合に最適なデータ形式だと思います。また「JavaScript Object Notation」というだけあってjavaScriptとの親和性も高く、もちろんActionScriptユーザーにも親しみやすいと思います。
今回のサンプルではActionScript2.0で、以下のような簡単なJSON形式のデータを受け取り、出力してみます。
data=[
{
"name":"hotei",
"height":"187",
"weight":"74",
"age":"46",
"blood":"B"
}]
要素名と値を”(ダブルクオーテーション)で囲い:(コロン)で区切ります。’(シングルクオーテーション)ではダメのようです。要素は,(セミコロン)で区切ります。要素の最後にはいりません。
上記のサンプルでは、dataという変数に、nameなど5つの要素をもったオブジェクトが入った配列が代入されているイメージです。
配列なのでオブジェクトは複数入れられます。後述。このJSONデータを「data.json」というファイル名で保存します。
そしてFlashでJSON形式を読み込む場合、まずはLoadVarsで読み込みます。
読み込んだLoadVarsをJSONクラスに渡し、解析してもらいます。返り値はオブジェクトです。
あとは通常のオブジェクトして値を受ければ良いだけです。
var dataObj:Object;
var jsonData:LoadVars = new LoadVars();
//データの読み込み
jsonData.onLoad=function(success:Boolean)
{
if(success)
{
dataObj = JSON.parse(jsonData.data);
if(dataObj.length != 0)
{
traceData(dataObj[0]);
}
}
}
jsonData.load("data.json");
//要素を出力
function traceData(Array)
{
//trace(o["name"]);// hotei を出力
for(var i in o)
{
trace(i+" : "+o[i]);
}
}
上記では
blood : B
age : 46
weight : 74
height : 187
name : hotei
と出力されるはずです。
さて、次は複数のオブジェクトを読み込む場合。こちらも特に難しいことはありません。
以下のような記述でオブジェクトを追加します。{}を,で区切るActionScriptユーザーにはおなじみだと思います。
data=[
{
"name":"hotei",
"height":"187",
"weight":"74",
"age":"46",
"blood":"B"
},
{
"name":"豊川\"トヨエツ\"悦司",
"height":"186",
"weight":"69",
"age":"46",
"blood":"O"
}
]
JSONはダブルクオーテーションで値と要素名を囲うため、値にダブルクオーテーションが入ってしまうとエラーを起こします。
それを回避するためには\(バックスラッシュ。¥ではダメでした。Flash CS3、AS2、Mac OSX 10.5)をダブルクオーテーションの前に入れるか、シングルクオーテーションに置換します。
こちらはJSONデータを作る際の作業なので、データ入力時、またはPHP側で処理します。
要素が増えても特に難しくなることはありません。
var dataObj:Object;
var jsonData:LoadVars = new LoadVars();
//データの読み込み、解析
jsonData.onLoad=function(success:Boolean)
{
if(success)
{
dataObj = JSON.parse(jsonData.data);
if(dataObj.length != 0)
{
traceData(dataObj);
}
}
}
jsonData.load("data.json");
function traceData(o:Object)
{
for(var i in o)
{
for(var k in o[i])
{
trace(k+" : "+o[i][k]);
}
trace("----");
}
}
今度は最初にやった処理を、dataObjの数だけ行えばよいだけです。
以下の値が出力されます。
blood : O
age : 46
weight : 69
height : 186
name : 豊川"トヨエツ"悦司
----
blood : B
age : 46
weight : 74
height : 187
name : hotei
----
JSON形式のデータはとても軽量でシンプルな構造、データの取り出しも簡単なので、例えばスライドショーや簡単なグラフを作るなど、簡単なアプリケーションに最適なデータ形式だと思います。
覚えておけば大活躍すると思います。
投稿者:daisuke カテゴリー:Flash,ActionScript, Javascript, Web

