Jump to content


Photo

Verificar si un nodo JSON esta completo.


Best Answer giulichajari , 10 March 2017 - 03:20 AM

Bueno ya logre hacerlo con un if comparando si es igual a nil...


delphi
  1. if (objdomicilio<>nil) then
  2. begin
  3. direccion:=objdomicilio.Values['direccion'].ToString;
  4. localidad:=objdomicilio.Values['localidad'].ToString;
  5. provincia:=objdomicilio.Values['idProvincia'].ToString;
  6. end;
  7. nroDoc:=Fidentificador;
  8. if (objdata.Values['impuestos']<>nil) then
  9. begin
  10. impuestos:=objdata.Values['impuestos'].ToString;
  11. end;

Gracias

Go to the full post


  • Please log in to reply
1 reply to this topic

#1 giulichajari

giulichajari

    Advanced Member

  • Miembros
  • PipPipPip
  • 477 posts

Posted 10 March 2017 - 02:53 AM

Programando con lkJSON con el servicio REST de AFIP de consulta al padron obtengo errores de escritura/lectura de memoria.

La estructura segun la documentacion dice:

 

{"success":true, "data":{datosDeNegocio}}

 

Y dentro de datos de negocio esta "domicilioFiscal", otro nodo tratado como TJSONObject.

 

Mostrando el objeto general digamos (el tronco del arbol, padre de todos los nodos) me doy cuenta de que no todos los contribuyentes tienen completo ese nodo.

 

Como puedo no forzar el acces al valor si esta incompleto.


delphi
  1. begin
  2. //crear objetos a usar
  3. NetHTTPRequestPADRON:=TNetHTTPRequest.Create(nil);
  4. NetHTTPClientPADRON:=TNetHTTPClient.Create(nil);
  5. //armar url del servicio
  6. url:='https://soa.afip.gob.ar' + '/' + sistema + '/' + version + '/' + recurso + '/' + Fidentificador;
  7. //asignar valores a componentes
  8. NetHTTPRequestPADRON.URL:=url;
  9. NetHTTPRequestPADRON.Client:=NetHTTPClientPADRON;
  10. try
  11. response:=NetHTTPRequestPADRON.Execute();
  12. //tomo el objeto JSON
  13. obj:=TJSONObject.ParseJSONValue(response.ContentAsString()) as TJSONobject;
  14.  
  15. objdata :=obj.Values['data'] as TJSONObject;
  16.  
  17. nombre:=objdata.Values['nombre'].ToString;
  18. tipoDoc:=objdata.Values['tipoDocumento'].ToString;
  19. //aca esta el objetodomicilio que no siempre existe objdomicilio:=objdata.Values['domicilioFiscal'] as TJSONObject;
  20. direccion:=objdomicilio.Values['direccion'].ToString;
  21. localidad:=objdomicilio.Values['localidad'].ToString;
  22. provincia:=objdomicilio.Values['idProvincia'].ToString;
  23. nroDoc:=Fidentificador;
  24. impuestos:=objdata.Values['impuestos'].ToString;
  25. ShowMessage(impuestos);
  26. //creo el objeto cliente
  27. NCliente:=TCliente.NuevoCliente(localidad,provincia,direccion,tipoDoc,nombre,nroDoc,impuestos);
  28. except
  29. on E:Exception do
  30. ShowMessage(E.ClassName + E.Message);
  31.  
  32.  
  33. end;

Gracias


  • 0

#2 giulichajari

giulichajari

    Advanced Member

  • Miembros
  • PipPipPip
  • 477 posts

Posted 10 March 2017 - 03:20 AM   Best Answer

Bueno ya logre hacerlo con un if comparando si es igual a nil...


delphi
  1. if (objdomicilio<>nil) then
  2. begin
  3. direccion:=objdomicilio.Values['direccion'].ToString;
  4. localidad:=objdomicilio.Values['localidad'].ToString;
  5. provincia:=objdomicilio.Values['idProvincia'].ToString;
  6. end;
  7. nroDoc:=Fidentificador;
  8. if (objdata.Values['impuestos']<>nil) then
  9. begin
  10. impuestos:=objdata.Values['impuestos'].ToString;
  11. end;

Gracias


  • 3




IP.Board spam blocked by CleanTalk.