Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Mensaje de JSON no valido (https://www.clubdelphi.com/foros/showthread.php?t=94360)

Kiranov 24-12-2019 00:12:50

Mensaje de JSON no valido
 
Buenas tardes,

Estoy trabajando con las librerias REST de delphi 10.3.2. Ya tengo hecho un servidor que me regresa un resultado de JSON y desde el REST Debuguer me dice que esta correcto. De ahi copie los componentes y lo pegue en una form, para probar y todo bien. El problema viene a la hora de usar esos mismo componentes que me dio el debugger y usarlos desde un TDataModule que esta dentro de una BPL. A la hora de usar la BPL carga la clase correctamente y carga los componentes pero al correr el comando Execute del RESTResponse me arroja el mensaje "Response content is not valid JSON.". A alguien le ha pasado algo así?

Saludos!

Casimiro Notevi 24-12-2019 09:53:52

Sí, claro, que el servidor no ha creado un json correcto de respuesta.
Si lo pones por aquí podemos echarle un vistazo.

Kiranov 24-12-2019 17:57:10

Cita:

Empezado por Casimiro Notevi (Mensaje 534961)
Sí, claro, que el servidor no ha creado un json correcto de respuesta.
Si lo pones por aquí podemos echarle un vistazo.

Buenos dias o tardes, depende se emcuentren

El JSON que me retorna es el siguiente:
Código:

{
    "result": [
        {
            "id": "1",
            "passwd": "*******",
            "username": "prueba1",
            "useractive": true,
            "lastpwdchange": "",
            "usedates": true,
            "validfrom": "01/01/2019",
            "validto": "31/12/2019",
            "usrcanchngpwd": true,
            "usrgroups": "",
            "fechaalta": "13/01/2019"
        }
    ]
}

Gracias por la ayuda,

Neftali [Germán.Estévez] 30-12-2019 16:51:55

¿Qué tipo de Servidor te está generando el JSON?
Hay que distinguir entre que un JSON sea correcto sintacticamente y que los componentes de Delphi sepan trasladarlo/convertirlo a un TDataset.
A veces el JSON trae algún nivel de más o de menos...

Kiranov 30-12-2019 21:07:30

Gracias por tu respuesta,

El servidor esta hecho en Delphi, es un servidor DataSnap el cual tiene la funcion que crea el resultado json de la siguiente manera:

Código Delphi [-]
function TServerMethods1.userinfo(const usuario,contrasena:string): TjsonObject;
var
  userinfo:tjsonobject;
begin
  try
    userinfo:=tjsonobject.Create;
    fdconnection1.Connected:=true;
    fdconnection1.Params.Database:='mibasededatos';
    fdquery1.SQL.Text:='SELECT * from sys_usercontrol WHERE userid=:userid AND passwd=PASSWORD(:userpasswd)';
    fdquery1.ParamByName('userid').AsString:=usuario;
    fdquery1.ParamByName('userpasswd').AsString:=contrasena;
    fdquery1.Open();
    if fdquery1.RecordCount>0 then
    begin
      userinfo.AddPair(TJSONPair.Create('id',fdquery1.FieldByName('id').AsString));
      userinfo.AddPair(TJSONPair.Create('passwd',fdquery1.FieldByName('passwd').AsString));
      userinfo.AddPair(TJSONPair.Create('username',fdquery1.FieldByName('username').AsString));
      userinfo.AddPair(TJSONPair.Create('useractive',TJSONBool.Create(fdquery1.FieldByName('useractive').A  sBoolean)));
      userinfo.AddPair(TJSONPair.Create('lastpwdchange',fdquery1.FieldByName('lastpwdchange').AsString));
      userinfo.AddPair(TJSONPair.Create('usedates',TJSONBool.Create(fdquery1.FieldByName('usedates').AsBoo  lean)));
      userinfo.AddPair(TJSONPair.Create('validfrom',fdquery1.FieldByName('validfrom').AsString));
      userinfo.AddPair(TJSONPair.Create('validto',fdquery1.FieldByName('validto').AsString));
      userinfo.AddPair(TJSONPair.Create('usrcanchngpwd',TJSONBool.Create(fdquery1.FieldByName('usrcanchngp  wd').AsBoolean)));
      userinfo.AddPair(TJSONPair.Create('usrgroups',fdquery1.FieldByName('usrgroups').AsString));
      userinfo.AddPair(TJSONPair.Create('fechaalta',fdquery1.FieldByName('fechaalta').AsString));
    end
    else
    begin
      userinfo.AddPair(tjsonpair.Create('ERROR','NO SE ENCONTRO EL USUARIO '+usuario))
    end;
  finally
    result:=userinfo;
  end;
end;

Sucede algo: Cuando tengo una form y le coloco los componentes que copio del REST Debugger, funciona de maravilla. Si invoco el recurdo REST desde el REST debugger o desde Postman, tambien el resultado me lo dan correcto ambas herramientas. Lo extraño es que al usar los mismos componentes pero dentro de un DataModule que se encuentra en una BPL es cuando me arroja el mensaje de "Response content is not a valid JSON". Solo cuando lo invoco desde los componentes del DataModule...

Saludos y gracias por la ayuda, esto me va volviendo cada vez mas loco jejeje...


La franja horaria es GMT +2. Ahora son las 00:52:18.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi