WDDX(Web Distributed Data eXchange) についてCFを触るまで知らなかったので取り上げてみます。
使い方を工夫すれば、何か作れそうな気がします(¦3 _ )=
WDDXタグについて
WDDXについて簡単に説明すると異なる環境でもデータ交換が可能になるデータ構造機構です。
対応する言語についてもJava、.Net、PHPなどに対応しているみたいです。
変換対応表
cfwddxタグについてですが、下記の変換を行うことができます。
type | 変換元 | 変換先 |
---|---|---|
cfml2wddx | CFML | WDDX |
cfml2js | CFML | JavaScript |
wddx2cfml | WDDX | CFML |
wddx2js | WDDX | JavaScript |
サンプルコード
サンプルコードについては下記の通りです。
<cfscript> // サンプルデータ groopA1 = ["GroupA", "Tanaka"]; groopA2 = ["GroupA", "Yamada"]; groopB = ["GroupB", "Saito"]; groopC1 = ["GroupC", "Ito"]; groopC2 = ["GroupC", "Suzuki", "20"]; groopC3 = ["GroupC", "Kondo"]; players = [groopA1, groopA2, groopB, groopC1, groopC2, groopC3]; testStruct = StructNew(); for (i=1; i<=ArrayLen(players); i++) { if (Not StructKeyExists(testStruct, players[i][1])) { StructInsert(testStruct, players[i][1], ArrayNew(1)); } ArrayAppend(testStruct['#players[i][1]#'], players[i]); } </cfscript> <!--- CFML→WDDX変換 ---> <cfwddx action="cfml2wddx" input="#testStruct#" output="wddxData"> <cfdump var="#encodeForHTML(wddxData)#"> <!--- WDDX→CFML変換 ---> <cfwddx action="wddx2cfml" input="#wddxData#" output="cfmlData"> <cfdump var="#cfmlData#"> <!--- CFML→JS変換 ---> <cfwddx action="cfml2js" input="#testStruct#" toplevelvariable="jsData" output="jsData"> <cfdump var="#jsData#">
CFML→WDDX変換結果
CFML→WDDXへの変換結果です。
今回は省略しますが、変換結果に対してWDDX→CFML変換を行うと元通りになります。
※横に凄く長いです。
<wddxPacket version='1.0'><header/><data><struct><var name='GroupA'><array length='2'><array length='2'><string>GroupA</string><string>Tanaka</string></array><array length='2'><string>GroupA</string><string>Yamada</string></array></array></var><var name='GroupB'><array length='1'><array length='2'><string>GroupB</string><string>Saito</string></array></array></var><var name='GroupC'><array length='3'><array length='2'><string>GroupC</string><string>Ito</string></array><array length='3'><string>GroupC</string><string>Suzuki</string><string>20</string></array><array length='2'><string>GroupC</string><string>Kondo</string></array></array></var></struct></data></wddxPacket>
CFML→JS変換結果
CFML→JSへの変換結果です。
outputオプションを省略した場合はファイルに対して直接出力されます。
jsData = new Object(); jsData["groupa"] = new Array(); jsData["groupa"][0] = new Array(); jsData["groupa"][0][0] = "GroupA"; jsData["groupa"][0][1] = "Tanaka"; jsData["groupa"][1] = new Array(); jsData["groupa"][1][0] = "GroupA"; jsData["groupa"][1][1] = "Yamada"; jsData["groupb"] = new Array(); jsData["groupb"][0] = new Array(); jsData["groupb"][0][0] = "GroupB"; jsData["groupb"][0][1] = "Saito"; jsData["groupc"] = new Array(); jsData["groupc"][0] = new Array(); jsData["groupc"][0][0] = "GroupC"; jsData["groupc"][0][1] = "Ito"; jsData["groupc"][1] = new Array(); jsData["groupc"][1][0] = "GroupC"; jsData["groupc"][1][1] = "Suzuki"; jsData["groupc"][1][2] = "20"; jsData["groupc"][2] = new Array(); jsData["groupc"][2][0] = "GroupC"; jsData["groupc"][2][1] = "Kondo";
DBを介して連携すれば良い感じに使えそう_(:3」∠)_