Topic: Обработка JSON - ответов
Добрый день!
Очень интересует вопрос получения и обработки json-сообщений отправляемых серверами при почтовых и смс-рассылках. Конкретно, как их можно сохранять в базе данных и в последующем обрабатывать?
My Visual Database → Russian → Обработка JSON - ответов
Добрый день!
Очень интересует вопрос получения и обработки json-сообщений отправляемых серверами при почтовых и смс-рассылках. Конкретно, как их можно сохранять в базе данных и в последующем обрабатывать?
JSON Оооочень простой текстовый формат по написанию я бы сказал родственник XML
Например общение с http://narodmon.ru происходит так :
Получение списка датчиков :
Посылаем
http://narodmon.ru/api?{"cmd":"sensorsOnDevice","id":хххх,"uuid":"065177ca671801525b642d90c0хххххх","api_key":"UNbpY7zhgххх","lang":"ru"}
Получаем
{"id":хххх,"mac":"ESP8266хххххххх","name":"ххххххххх","my":1,"owner":"10ххх","location":"Краснодарский край, Россия","distance":565.28,"liked":1,"uptime":50,"sensors":[{"id":20689,"mac":"DS18T1","fav":0,"pub":0,"type":1,"name":"Корридор","value":12.9,"unit":"°","time":1522513380,"changed":1522512796,"trend":0},{"id":25685,"mac":"U4","fav":1,"pub":0,"type":13,"name":"PZEM-004T_Напр. на
вводе","value":158.8,"unit":"V","time":1522513096,"changed":1522513096,"trend":0},
{"id":25687,"mac":"W4","fav":1,"pub":0,"type":6,"name":"PZEM-004T_Потреб. мощность","value":146,"unit":"W","time":1522513096,"changed":1522513096,"trend":0}]}
А разбирается это дело тоже очень просто
Вот процедура и функция которая выводят это в грид через временную таблицу (так надо было) :
procedure sensorsOnDevice (Sender: string; var Cancel: boolean);
var
str:string;
kursor:integer ;
json :string ;
begin
//{"cmd":"sensorsOnDevice","id":1234,"uuid":"UUID","api_key":"API_KEY","lang":"ru"}
json := '{"cmd":"sensorsOnDevice","id":'+id_u+',"uuid":"'+uuid+'","api_key":"'+api_key+'","lang":"'+lang+'"}'; // JSON
http_string := HTTPGet('http://narodmon.ru/api?'+json);
http_string := DecodeUTF(http_string);
log.Memo1.Lines.add('-----------------sensorsOnDevice------------------');
log.Memo1.Lines.add('http://narodmon.ru/api?'+json);
log.Memo1.Lines.add(http_string);
narod.Edit2.Text := CutData('id');
narod.Edit3.Text := CutData('owner');
//CREATE TEMPORARY TABLE VTab
//(
//id INTEGER PRIMARY KEY ,
//s_id INTEGER,
//s_name TEXT,
//s_value TEXT,
//s_unit TEXT,
//s_time INTEGER,
//)
SQLExecute ('DELETE FROM Vtab');// Очищаем временную таблицу
kursor := posex('[',http_string,1);
while posex('{',http_string,kursor)<>0 do
begin
kursor := posex('{',http_string,kursor);
str := str +#39+ CutData('id',kursor) +#39+ ',';
str := str +#39+ CutData('name',kursor) +#39+ ',';
str := str +#39+ CutData('value',kursor)+#39+ ',';
str := str +#39+ CutData('unit',kursor) +#39+ ',';
str := str +#39+ DateTimeToStr(UnixToDateTime(StrToInt(CutData('time',kursor))))+#39;
SQLExecute ('INSERT INTO Vtab (s_id, s_name, s_value, s_unit, s_time ) VALUES ('+str+')' );
str:='';
kursor := kursor + 1;
end;
narod.TableGrid1.dbSQL := 'SELECT id, s_id as '+#39+'ID_Датчика'+#39+', s_name AS '+#39+'Наименование'+#39+', s_value AS '+#39+'Значение'+#39+', s_unit AS '+#39+'Ед.Изм'+#39+', s_time AS '+#39+'Время '+#39+'FROM Vtab';
narod.TableGrid1.dbSQLExecute();
narod.TableGrid1.BestFitColumns(bfBoth);
//- sensors[id] целочисленный код датчика в проекте;
//- sensors[pub] = 1, если датчик публичный и = 0, если датчик приватный;
//- sensors[type] код типа датчика из справочника sensorType;
//- sensors[name] название датчика или его ID (если нет названия);
//- sensors[value] последнее показание датчика;
//- sensors[unit] единица измерения;
//- sensors[time] время последнего показания датчика в UnixTime;
//- sensors[changed] время последнего изменения показаний датчика в UnixTime;
//- sensors[trend] коэффициент линейного роста показаний датчика за последний час, рассчитанный по МНК.
end;
function CutData(pole:string ;kursor : integer = 1 ):string ;
var
pozN,pozK,dlin : int ;
begin
dlin := length(pole);
pozN := posex(pole,http_string,kursor) + dlin + 2 ;
if copy(http_string,pozN,1)='"' then
begin
pozN:=pozN + 1;
pozK:=posex('"',http_string,pozN);
end
else pozK := posex(',',http_string,pozN);
result := copy(http_string,pozN,pozK-pozN);
end;
В Вашем случае нужно знать формат общения с почтовым сервером , по поводу смс хз ни разу не интересовался
а сохранять так же как и во временную таблицу предварительно разобрав текст на поля
Спасибо за внятный ответ, буду пробовать
My Visual Database → Russian → Обработка JSON - ответов
Powered by PunBB, supported by Informer Technologies, Inc.
Theme Hydrogen by Kushi