【ColdFusion】cfwddxタグの使い方について

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変換を行うと元通りになります。
※横に凄く長いです。

&lt;wddxPacket version&#x3d;&#x27;1.0&#x27;&gt;&lt;header&#x2f;&gt;&lt;data&gt;&lt;struct&gt;&lt;var name&#x3d;&#x27;GroupA&#x27;&gt;&lt;array length&#x3d;&#x27;2&#x27;&gt;&lt;array length&#x3d;&#x27;2&#x27;&gt;&lt;string&gt;GroupA&lt;&#x2f;string&gt;&lt;string&gt;Tanaka&lt;&#x2f;string&gt;&lt;&#x2f;array&gt;&lt;array length&#x3d;&#x27;2&#x27;&gt;&lt;string&gt;GroupA&lt;&#x2f;string&gt;&lt;string&gt;Yamada&lt;&#x2f;string&gt;&lt;&#x2f;array&gt;&lt;&#x2f;array&gt;&lt;&#x2f;var&gt;&lt;var name&#x3d;&#x27;GroupB&#x27;&gt;&lt;array length&#x3d;&#x27;1&#x27;&gt;&lt;array length&#x3d;&#x27;2&#x27;&gt;&lt;string&gt;GroupB&lt;&#x2f;string&gt;&lt;string&gt;Saito&lt;&#x2f;string&gt;&lt;&#x2f;array&gt;&lt;&#x2f;array&gt;&lt;&#x2f;var&gt;&lt;var name&#x3d;&#x27;GroupC&#x27;&gt;&lt;array length&#x3d;&#x27;3&#x27;&gt;&lt;array length&#x3d;&#x27;2&#x27;&gt;&lt;string&gt;GroupC&lt;&#x2f;string&gt;&lt;string&gt;Ito&lt;&#x2f;string&gt;&lt;&#x2f;array&gt;&lt;array length&#x3d;&#x27;3&#x27;&gt;&lt;string&gt;GroupC&lt;&#x2f;string&gt;&lt;string&gt;Suzuki&lt;&#x2f;string&gt;&lt;string&gt;20&lt;&#x2f;string&gt;&lt;&#x2f;array&gt;&lt;array length&#x3d;&#x27;2&#x27;&gt;&lt;string&gt;GroupC&lt;&#x2f;string&gt;&lt;string&gt;Kondo&lt;&#x2f;string&gt;&lt;&#x2f;array&gt;&lt;&#x2f;array&gt;&lt;&#x2f;var&gt;&lt;&#x2f;struct&gt;&lt;&#x2f;data&gt;&lt;&#x2f;wddxPacket&gt;

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」∠)_

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です