Я тестирую приложение под названием «Сканер штрих-кода» для своего бизнеса; Я хочу использовать его в качестве замены сортировки для тайм-слова.JSON/CFML - Зацикливание по массиву структур
Сотрудники могут сканировать штрих-код или QR-код на свой идентификационный значок, и это приложение отправит это вместе с меткой времени и даже координатами GPS на мой сервер, чтобы убедиться, что они находятся в нужном месте в нужное время. Когда у телефона есть подключение к Интернету, эта информация передается через специальный URL-адрес на моем сайте, и я могу заставить его работать безупречно.
Проблема?
Когда нет Интернета, телефон сохраняет сканирование локально, и вы можете отправить его на свой сервер позже. Эти проверки хранятся в виде массива JSON структур.
According to the documentation
... Данные хранятся таким образом, могут быть отправлены на сервер как запрос POST. Я не знал, как проверить все это, поэтому я просто установил некоторые переменные, выполнил сканирование и отправил мне электронное письмо, которое сбросило значения, которые они представляли.
<cfset requestBody = toString(getHttpRequestData().content)/>
Вернул этот чудовище и многие другие; то, что вы видите ниже, - это одно сканирование.
партия =% 5B% 7B% 22barcode% 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
Так я побежал это значение с помощью функции URLDecode() к получить то, что выглядит более знакомым.
<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}]
Так в конце концов я имел кучу сканов, образовавших этот массив структур в формате JSON, и я понятия не имею, как справиться с этим.
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}
]
Я ПЫТАЮСЬ, чтобы пройти через него и вставить их все в базу данных.
До сих пор у меня есть это, и я получаю ошибку синтаксического анализа 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>
Вот ошибка, которую я получаю.
Спасибо!
EDIT: Решено спасибо частично, чтобы помочь мне получить здесь. Решение ниже:
<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>
Обратите внимание, что, несмотря на название этого сообщения, это не имеет ничего общего с циклом над чем-либо, а вместо синтаксического анализа строки JSON. Фактически, вся почта могла быть сведена к нулю, кроме декодированной строки JSON, и предложение, предлагающее десериализовать его. –
Я подумал, что могу смутить некоторых людей. Факт: у меня нет большого опыта работы с JSON, и я решил, что могу превратить его в объект запроса или что-то в этом роде. Всегда учись! – TRose
Технически вы можете преобразовать его в запрос, но в действительности нет необходимости. Ваш первый инстинкт был правильным. Просто десериализуйте его в массивы и структуры. Затем перебираем массив. Нет необходимости в объекте запроса. – Leigh