Topic: XML parser
в версии 4.6 есть XML, JSON parser или использовать TStringList ?
My Visual Database → Russian → XML parser
в версии 4.6 есть XML, JSON parser или использовать TStringList ?
Есть, могу дать пример из одного своего проекта, импорт в базу из JSON файла
procedure ImportJSON(JsonFile: string; idCity: integer);
var
sl: TStringList;
JSONObject, JSONObjProp, JSONObjGeometry: TJSONObject;
i:integer;
k: integer;
JsonArray, JsonArrayCoord: TJSONArray;
JSONString: TJSONString;
sqlInsert, s: string;
begin
SQLExecute('DELETE FROM ptp WHERE id_city='+IntToStr(idCity));
JSONObject := nil;
sl:=TStringList.Create;
SQLExecute('PRAGMA synchronous = OFF');
try
sl.LoadFromFile(JsonFile);
//пробуем распарсить
JSONObject:=TJSONObject(TJSONObject.ParseJSONValue(sl.Text));
if JSONObject <> nil then //парсинг прошел успешно - считываем названия пар
begin
frmDict.lbImport.Caption := '';
frmDict.lbImport.Visible := true;
JsonArray:=TJSONArray(JSONObject.GetPairByName('features').JsonValue);
for i := 0 to JsonArray.Size-1 do
begin
sqlInsert := '';
JSONObjProp := TJSONObject( TJSONObject(JsonArray.Get(i)).GetPairByName('properties').JsonValue );
JSONString := TJSONString(JSONObjProp.GetPairByName('DateTime').JsonValue);
s := JSONString.Value;
s := ReplaceStr(s, 'T', ' ');
s := ReplaceStr(s, 'Z', '');
if Length(s)>=19 then sqlInsert := '"'+s+'"' else sqlInsert := 'NULL';
JSONString := TJSONString(JSONObjProp.GetPairByName('ptptype').JsonValue);
s := JSONString.Value;
if s = 'pedestrian' then sqlInsert := sqlInsert + ', 1'
else if s = 'car' then sqlInsert := sqlInsert + ', 2'
else sqlInsert := sqlInsert + ', NULL';
JSONString := TJSONString(JSONObjProp.GetPairByName('carRedSignal').JsonValue);
s := JSONString.Value;
if s <> '' then sqlInsert := sqlInsert + ', ' + s else sqlInsert := sqlInsert + ', NULL';
JSONString := TJSONString(JSONObjProp.GetPairByName('carTurnLeft').JsonValue);
s := JSONString.Value;
if s <> '' then sqlInsert := sqlInsert + ', ' + s else sqlInsert := sqlInsert + ', NULL';
JSONString := TJSONString(JSONObjProp.GetPairByName('carTurnRight').JsonValue);
s := JSONString.Value;
if s <> '' then sqlInsert := sqlInsert + ', ' + s else sqlInsert := sqlInsert + ', NULL';
JSONString := TJSONString(JSONObjProp.GetPairByName('pedRedSignal').JsonValue);
s := JSONString.Value;
if s <> '' then sqlInsert := sqlInsert + ', ' + s else sqlInsert := sqlInsert + ', NULL';
JSONString := TJSONString(JSONObjProp.GetPairByName('pedWrongCross').JsonValue);
s := JSONString.Value;
if s <> '' then sqlInsert := sqlInsert + ', ' + s else sqlInsert := sqlInsert + ', NULL';
JSONString := TJSONString(JSONObjProp.GetPairByName('pedKid').JsonValue);
s := JSONString.Value;
if s <> '' then sqlInsert := sqlInsert + ', ' + s else sqlInsert := sqlInsert + ', NULL';
JSONString := TJSONString(JSONObjProp.GetPairByName('danger').JsonValue);
s := JSONString.Value;
if s <> '' then sqlInsert := sqlInsert + ', ' + s else sqlInsert := sqlInsert + ', NULL';
JSONString := TJSONString(JSONObjProp.GetPairByName('description').JsonValue);
s := JSONString.Value;
if s <> '' then sqlInsert := sqlInsert + ', ''' + escape_special_characters(s)+'''' else sqlInsert := sqlInsert + ', NULL';
JSONObjGeometry := TJSONObject( TJSONObject(JsonArray.Get(i)).GetPairByName('geometry').JsonValue );
JsonArrayCoord := TJSONArray(JSONObjGeometry.GetPairByName('coordinates').JsonValue);
if JsonArrayCoord.Size=2 then
begin
sqlInsert := sqlInsert +', '+ JsonArrayCoord.Get(0).ToString;
sqlInsert := sqlInsert +', '+ JsonArrayCoord.Get(1).ToString;
end;
JSONObjGeometry := TJSONObject( TJSONObject(JsonArray.Get(i)).GetPairByName('geometry').JsonValue );
JsonArrayCoord := TJSONArray(JSONObjGeometry.GetPairByName('coordinates').JsonValue);
frmDict.lbImport.Caption := IntToStr(i)+ ' of ' + IntToStr(JsonArray.Size-1);
Application.ProcessMessages;
SQLExecute('INSERT INTO ptp (id_city, "datetime", id_ptptype, carRedSignal, carTurnLeft, carTurnRight, pedRedSignal, pedWrongCross, pedKid, danger, description, longitude, latitude) VALUES ('+IntToStr(idCity)+', '+sqlInsert+')');
end;
ShowMessage('Готово');
frmDict.lbImport.Visible := False;
end else
begin
//парсинг провалился - выводим сообщение
ShowMessage('error');
end;
finally
sl.Free;
SQLExecute('PRAGMA synchronous = FULL');
end;
end;
пример JSON файла
{
"type": "FeatureCollection",
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
"features": [
{ "type": "Feature", "properties": { "DateTime": "2015-01-15T08:00:00.000Z", "ptptype": "car", "carRedSignal": "0", "carTurnLeft": "0", "carTurnRight": "0", "pedRedSignal": "0", "pedWrongCross": "0", "pedKid": "0", "danger": "0", "description": "На 15.01. т.г., около 08:00 часа, в гр. Варна, на кръстовището на ул. «Никола Симов» и бул. «Република», водачката на Л.А. «Опел» Л.П. на 31 г. от гр. Варна не спазва пътен знак «Б2 – Спри! Пропусни движещия се по път с предимство» и е блъсната от Л.А. «Шкода». Вследствие на инцидента е пострадала водачката на Л.А. «Опел», която получава контузия на глава, прегледана и освободена, без опасност за живота." }, "geometry": { "type": "Point", "coordinates": [ 27.8748719, 43.224593 ] } },
{ "type": "Feature", "properties": { "DateTime": "2015-01-15T14:20:00.000Z", "ptptype": "car", "carRedSignal": "0", "carTurnLeft": "0", "carTurnRight": "0", "pedRedSignal": "0", "pedWrongCross": "0", "pedKid": "0", "danger": "0", "description": "На 15.01. т.г., около 14:20 часа, в гр. Варна, преди кръстовището на ул. «Ян Палах» и ул. «Брегалница», водачът на Л.А. «Дачия» А.А. на 33 г. от гр. Шумен, поради движение с несъобразена скорост, блъска Л.А. «Опел», спрял пред него. Вследствие на инцидента е пострадала пътничка от Л.А. «Опел», жена на 31 г. от гр. Варна, която получава контузия на глава и шия, прегледана и освободена, без опасност за живота." }, "geometry": { "type": "Point", "coordinates": [ 27.9165806, 43.2206212 ] } }
]
}
danger
Думаю, что не много, добавил для создания своего проекта и видимо забыл внести в классы.
Круто, спасибо!
My Visual Database → Russian → XML parser
Powered by PunBB, supported by Informer Technologies, Inc.
Theme Hydrogen by Kushi