Hola buenas, hace unos días que estoy lidiando con el ejemplo de este hilo. De momento he conseguido leer los datos de una web api, mediante post y obtener el texto legible del Json, pero no consigo parsear los datos a un TclientDataset.
El código que tengo para ello, siguiendo el ejemplo de Neftalí és el siguiente:
Código Delphi
[-]procedure TForm2.ParseResponse(AObjResp: TlkJSONobject);
var
objUserList:TlkJSONlist;
objUser, objtmp:TlkJSONobject;
i:integer;
Str:String;
cds:TClientDataSet;
begin
cds := ClientDataSet1;
cds.EmptyDataSet;
showmessage(IntToStr(AObjResp.Count));
if (AObjResp.IndexOfName('Check') <> -1) then begin TlkJSONBase(objUserList) := AObjResp.Field['Check'];
for i := 0 to (objUserList.Count - 1) do begin
TlkJSONBase(objUser) := objUserList.Child[i];
TlkJSONBase(objtmp) := objUser.FieldByIndex[0];
cds.Append;
try
cds.FieldByName('id').AsString := VarToStr(objtmp.Field['id'].Value);
cds.FieldByName('date').AsDateTime := VarToDateTime(objtmp.Field['date'].Value);
cds.FieldByName('user_id').AsString := VarToStr(objtmp.Field['user_id'].Value);
cds.FieldByName('admin_id').AsString := VarToStr(objtmp.Field['admin_id'].Value);
cds.FieldByName('latitude').AsString := VarToStr(objtmp.Field['latitude'].Value);
cds.FieldByName('longitude').AsString := VarToStr(objtmp.Field['longitude'].Value);
cds.FieldByName('comment').AsString := VarToStr(objtmp.Field['comment'].Value);
cds.FieldByName('type').AsString := VarToStr(objtmp.Field['type'].Value);
cds.FieldByName('ip').AsString := VarToStr(objtmp.Field['ip'].Value);
cds.FieldByName('from').AsString := VarToStr(objtmp.Field['from'].Value);
cds.FieldByName('changed').AsString := VarToStr(objtmp.Field['changed'].Value);
cds.Post;
finally
cds.Cancel;
end;
end;
end;
end;
Y el Json viene cargado con datos de este tipo:
Código:
[
{
"Check":{
"id":"5cbe8e5b-9f0c-4c02-bc1b-4629bca5fb54",
"date":"2019-04-23 04:02:35",
"created":"2019-04-23 06:02:35",
"modified":"2019-04-23 06:02:35",
"user_id":"56657074-4e7c-4fe6-82b8-3b54bca5fb54",
"admin_id":null,
"latitude":"41.8696479797",
"longitude":"2.4183871746",
"comment":null,
"type":"1",
"ip":"31.4.188.115",
"from":null,
"changed":"0"
}
},
{
"Check":{
"id":"5cbebab1-81bc-43c5-b244-5e4abca5fb54",
"date":"2019-04-23 06:40:00",
"created":"2019-04-23 09:11:45",
"modified":"2019-04-23 10:12:18",
"user_id":"56657074-4e7c-4fe6-82b8-3b54bca5fb54",
"admin_id":"566e5a86-3aec-48a7-90d9-15b6bca5fb54",
"latitude":null,
"longitude":null,
"comment":null,
"type":"1",
"ip":null,
"from":null,
"changed":"0"
}
},
{
"Check":{
"id":"5cbeba9a-63f8-47d7-9903-5e4abca5fb54",
"date":"2019-04-23 07:11:22",
"created":"2019-04-23 09:11:22",
...
...
la línea:
if (AObjResp.IndexOfName('Check') <> -1) then begin
provoca un error Access violation xxxx read of adress yyyy
Podeis echarme una mano? Cualquier cosa que intento me da error y no se como continuar.
Gracias de antemano