Ir al contenido


Foto

Verificar si un nodo JSON esta completo.


Mejor respuesta giulichajari , 10 marzo 2017 - 03:20

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

Ir al mensaje completo


  • Por favor identifícate para responder
1 respuesta en este tema

#1 giulichajari

giulichajari

    Advanced Member

  • Miembros
  • PipPipPip
  • 477 mensajes

Escrito 10 marzo 2017 - 02:53

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 mensajes

Escrito 10 marzo 2017 - 03:20   Mejor respuesta

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.