toJSONファンクションをバージョンアップしました。
今までは、
Array[1] = "Apple"
Array[2] = "Lemon"
Array[3] = "Orange"
と配列の値が、文字列か数値しかJSON変換できなかったのですが、今回、1次元の配列の場合も変換できるようにしました。
例えば、
Array[1] = "Food"
Array[2] = Hoge["Apple","Lemon","Orange"]
Array[3] = "Banana"
という場合の配列があったならば、今回のプログラムの変更により、
var data = {
"0":"Food"
,"1":[{"1_1":"Apple","1_2":"Lemon","1_3":"Orange"}]
,"2":"Banana"
}
と変換できるようになりました。
ソースは次のような形で作りました。
< CFFUNCTION name="toJSON" > <!--- declare arguments ---> <CFARGUMENT name="aArray" type="array" REQUIRED="yes"> <CFARGUMENT name="aScr" type="boolean" REQUIRED="no" default=true> <CFARGUMENT name="aInd" type="numeric" REQUIRED="no" default=0> <CFARGUMENT name="aName" type="string" REQUIRED="no" default="data"> <!--- declare variables ---> <CFSCRIPT> var i = ""; var tmp = ""; var ind = ""; </CFSCRIPT> <CFOUTPUT> <!--- if aScr is true , make SCRIPT tag ---> <CFIF aScr EQ true> <!--- make SCRIPT tag ---> <SCRIPT type="text/javascript"> </CFIF> <CFSET ind = aInd> <!--- output JSON ---> var #aName# = { <!--- loop From 1 TO aArray'slength ---> <CFLOOP index="i" from="1" to="#ArrayLen(aArray)#"> <CFIF i NEQ 1>,</CFIF>"#ind#": <!--- Is Array ---> <CFIF IsArray(aArray[#i#])> [{ <CFLOOP index="k" from="1" to="#Evaluate("ArrayLen(aArray[#i#])")#"> <CFSET tmp = Evaluate("aArray[#i#][#k#]")> <CFIF k NEQ 1>,</CFIF>"#i#_#k#":"#IIF(tmp NEQ "" , DE("#tmp#"), DE("null"))#" </CFLOOP> }] <!--- Not Array ---> <CFELSE> <CFSET tmp = Evaluate("aArray[#i#]")> "#IIF(tmp NEQ "" , DE("#tmp#"), DE("null"))#" </CFIF> <CFSET ind = ind + 1> </CFLOOP> }; <!--- if aScr is true , make SCRIPT tag ---> <CFIF aScr EQ true> <!--- make SCRIPT tag ---> </SCRIPT> </CFIF> </CFOUTPUT> </CFFUNCTION> |
このファンクションを通して、配列の値が、1次元配列でも、JSON変換できるようになりました。
さっそく、前回のプログラムをtoJSON_1.0.cfm、今回のファンクションをtoJSON_1.25としてアップロードしました。
0 コメント:
コメントを投稿