【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='1.0'&gt;&lt;header/&gt;&lt;data&gt;&lt;struct&gt;&lt;var name='GroupA'&gt;&lt;array length='2'&gt;&lt;array length='2'&gt;&lt;string&gt;GroupA&lt;/string&gt;&lt;string&gt;Tanaka&lt;/string&gt;&lt;/array&gt;&lt;array length='2'&gt;&lt;string&gt;GroupA&lt;/string&gt;&lt;string&gt;Yamada&lt;/string&gt;&lt;/array&gt;&lt;/array&gt;&lt;/var&gt;&lt;var name='GroupB'&gt;&lt;array length='1'&gt;&lt;array length='2'&gt;&lt;string&gt;GroupB&lt;/string&gt;&lt;string&gt;Saito&lt;/string&gt;&lt;/array&gt;&lt;/array&gt;&lt;/var&gt;&lt;var name='GroupC'&gt;&lt;array length='3'&gt;&lt;array length='2'&gt;&lt;string&gt;GroupC&lt;/string&gt;&lt;string&gt;Ito&lt;/string&gt;&lt;/array&gt;&lt;array length='3'&gt;&lt;string&gt;GroupC&lt;/string&gt;&lt;string&gt;Suzuki&lt;/string&gt;&lt;string&gt;20&lt;/string&gt;&lt;/array&gt;&lt;array length='2'&gt;&lt;string&gt;GroupC&lt;/string&gt;&lt;string&gt;Kondo&lt;/string&gt;&lt;/array&gt;&lt;/array&gt;&lt;/var&gt;&lt;/struct&gt;&lt;/data&gt;&lt;/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」∠)_

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください