¿Existe una manera simple de serializar una estructura de un solo nivel como una cadena para usar en una url?Coldfusion: pasando una estructura como cadena a través de la url
por ejemplo:
?key1=val1&key2=val2
¿Existe una manera simple de serializar una estructura de un solo nivel como una cadena para usar en una url?Coldfusion: pasando una estructura como cadena a través de la url
por ejemplo:
?key1=val1&key2=val2
<cfscript>
// create simple struct
x = { a=1, b=2, c=3 };
WriteDump(x);
// serialize in JSON format and encode for URL transport
y = URLEncodedFormat(SerializeJSON(x));
WriteOutput('url: <a href="#SCRIPT_NAME#?z=#y#">#SCRIPT_NAME#?#y#</a>');
// now receive the URL variable and dump it
if (StructKeyExists(url, 'z')) {
writeOutput('<h3>URL Data:</h3>');
writeDump(DeserializeJSON(URLDecode(z)));
}
</cfscript>
¿cómo es esta?
<cfset tmpStruct = {"firstItem" = "one", "secondItem" = "two"} />
<cfset myUrl = "http://domain.com/file.cfm?" />
<cfloop list="#structKeyList(tmpStruct)#" index="i" >
<cfset myUrl = myUrl & i & "=" & tmpStruct[i] & "&" />
</cfloop>
<cfset myUrl = left(myUrl,len(myUrl)-1) />
<cfdump var="#myUrl#" />
bastante bien en realidad :) – Daniel
No se olvide que puede utilizar también funciones de la lista, es decir, 'para (clave en tmpStruct) { \t myURL = listAppend (myURL, clave y "=" & URLEncodedFormat (tmpStruct [clave]), "&"); \t}. Ambos funcionan, aunque el enfoque json atrae al programador perezoso en mí;) – Leigh
Supongo que lo único que puedo decir sobre mi solución es que funciona con estructuras aún más complejas. ¡Paul mecanografía más rápido que yo!: D – BKK
Pensé en esta solución también. Es más robusta, como dijiste, puede manejar estructuras complejas pero siempre hay que deserializar JSON el json en cada página receptora. Hice algo muy similar en este ejemplo pero a través de la forma: http://stackoverflow.com/questions/10392604/coldfusion-serializejson-example/10392839#10392839 – Paul
¡Gran respuesta, Ben! –