JSON / CFML: bucle sobre una matriz de estructuras

Estoy probando una aplicación llamada Barcode Scanner Terminal para mi negocio; Estoy buscando usarlo como una especie de reemplazo para un reloj de tiempo.

Los empleados pueden escanear un código de barras o un código QR en su credencial de identificación, y esta aplicación lo enviará, junto con una marca de tiempo e incluso coordenadas GPS a mi servidor para verificar que estén en el lugar correcto en el momento correcto. Cuando el teléfono tiene una conexión a Internet, esta información se transmite a través de una URL especial en mi sitio y puedo hacer que funcione sin problemas.

¿El problema?

Cuando no hay internet, el teléfono almacena los escaneos localmente y puede enviarlos a su servidor más tarde. Estos escaneos se almacenan como una matriz JSON de estructuras.

De acuerdo con la documentación

... Los datos almacenados de esta manera se pueden enviar al servidor como una solicitud POST. No estaba seguro de cómo probar todo esto, así que solo configuré algunas variables, hice un escaneo y me enviaron un correo electrónico que arrojó los valores que representaban.

<cfset requestBody = toString( getHttpRequestData().content )/>

Volvió esta monstruosidad y muchas otras como esta; lo que ves a continuación es de un escaneo.

lote =% 5B% 7B% 22 código de barras% 22% 3A% 22CSS1959% 22% 2C% 22scannerID% 22% 3A% 223e81b04aa521a05e% 22% 2C% 22time% 22% 3A% 222015-08-11 + 08% 3A28% 3A20.419 % 22% 2C% 22lat% 22% 3A32.3999433% 2C% 22long% 22% 3A-110.040379% 7D% 5D

Así que ejecuté ese valor a través de la función URLDecode () para obtener algo que parece más familiar.

<cfset decodedBody = #URLDecode(requestBody)#>
<!--- This would output the following. Line breaks are for ease of reading. --->
batch=[{"barcode":"CSS1959","scannerID":"3e81b04aa521a05e",
"time":"2015-08-11 08:28:20.419","lat":32.3999433,"long":-110.040379}] 

Finalmente, tuve un montón de escaneos que formaron esta matriz de estructuras en JSON y no tengo idea de cómo manejarlo.

batch=[
{"barcode":"CSS1035","scannerID":"3e81b04aa521a05e","time":"2015-08-11 08:30:27.232","lat":32.4001579,"long":-110.0403455},
{"barcode":"CSS1959","scannerID":"3e81b04aa521a05e","time":"2015-08-11 08:30:29.366","lat":32.4001579,"long":-110.0403455},
{"barcode":"CSS1649","scannerID":"3e81b04aa521a05e","time":"2015-08-11 08:30:31.642","lat":32.4001579,"long":-110.0403455}
] 

Estoy tratando de recorrerlo e insertarlos todos en una base de datos.

Hasta ahora tengo esto y recibo un error de análisis JSON.

<cfset requestBody = toString( getHttpRequestData().content ) />
<cfset decodedBody = #URLDecode(requestBody)#>
<!---This is where I falter because I have no idea how to handle it.--->
<cfset arrayOfStructs = deserializeJson(decodedBody)>
<cfloop array="#arrayOfStructs#" index="barcode">
blah blah query logic
</cfloop>

Aquí está el error que recibo.

¡Gracias!

EDITAR: Resuelto gracias en parte por la ayuda que recibí aquí. Solución a continuación:
<cfset requestBody = #replaceNoCase( toString(getHttpRequestData().content), "batch=", "" )#  />
<cfset decodedBody = #URLDecode(requestBody)#>
<cfset ArrayOfStructs = deserializeJson(decodedBody)>
<cfloop array="#ArrayOfStructs#" index="i">
<cfquery name="doodoodoo" datasource="CRM">
    INSERT INTO TimeAppTest
    (
        EmployeeID,
        lat,
        long,
        TimoStampo
        )
    VALUES
    (
        '#i.barcode#',
        '#i.lat#',
        '#i.long#',
        '#i.time#'

        )
</cfquery>
</cfloop>

Respuestas a la pregunta(2)

Su respuesta a la pregunta