Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-10-2015
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
TJsonArray con corchetes de más

Buenos días, tardes, noches... a todos segun corresponda.

Hoy vengo a plantear un caso y saber si a ustedes les ha pasado esto y si lo han solucionado de alguna manera diferente.

Tengo Un DataSnap Server al cual me conecto por medio de su TDSHTTPService utilizando sus cualidades REST por medio de JSon.

En algun momento he necesitado compartir imagenes, archivos o en fin cualquier TStream, así que tengo una función en el server, parecida a esta, que devuelve el TStream serializado como TJsonArray, así:

Código Delphi [-]
function TServerMethods.GetImagen: TJSONArray;
var
  vStream: TStream;
begin
  vStream := TStream.Create;
  try
    vStream := GetImagenInterno;

    Result := TDBXJSONTools.StreamToJSON(vStream, 0, vStream.Size);
  finally
    vStream.Free;
  end;
end;

Básicamente lo que hace es cargar un archivo y devolverlo serializado en un TJsonArray de enteros, que debería verse así, por ejemplo:
Código:
[1, 5, 7, 8, 9...]
Pero por alguna razón el server envía dicho TJsonArray, así:
Código:
[[1, 5, 7, 8, 9...]]
Como pueden ver, por alguna razón por mí desconocida hasta el momento, agrega un corchete de más al inicio y un corchete de más, al final... por lo que al tratar de hacer lo siguiente en el cliente no convierte correctamente el arreglo a TStream:

Código Delphi [-]
var
  vJArray: TJSONArray;
  vMemStream: TMemoryStream;
begin
  vMemStream := TMemoryStream.Create;
  try
    RESTRequest2.Execute;

    vJArray := TJSONObject.ParseJSONValue(RESTResponse2.Content) as TJSONArray;

    vMemStream.LoadFromStream(TDBXJSONTools.JSONToStream(vJArray)); //Con esto convierto de TJSonArray a TStream 

    ImageViewer1.Bitmap.LoadFromStream(vMemStream);

  finally
    vMemStream.Free;
  end;
end;

Por lo que si hago una "chapuza" (Como la siguiente) para quitar de la cadena de texto recibida ese corchete incial y final de más... pues me muestra la imagen y todo aparenta estar bien, pero no es algo optimo ya que es un paso de más que finalmente afectará el rendimiento de la aplicación cliente:

Código Delphi [-]
var
  vJArray: TJSONArray;
  vMemStream: TMemoryStream;
  vCadena: String;
begin
  vMemStream := TMemoryStream.Create;
  try
    RESTRequest2.Execute;

    vCadena := DMPrincipal.RESTResponse2.Content;
    vCadena[1] := ' ';
    vCadena[Length(vCadena)] := ' ';


    vJArray := TJSONObject.ParseJSONValue(vCadena) as TJSONArray;

    vMemStream.LoadFromStream(TDBXJSONTools.JSONToStream(vJArray)); //Con esto convierto de TJSonArray a TStream 

    ImageViewer1.Bitmap.LoadFromStream(vMemStream);

  finally
    vMemStream.Free;
  end;
end;

La duda finalmente es, ¿Qué debería hacer para que el server me devuelva de manera natural y sin este tipo de "chapuzeras" correctamente el TJsonArray, sin esos corchetes de más?

Por su tiempo y atención, muchas gracias
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Los corchetes de Eduarcol JoseFco La Taberna 44 15-08-2008 12:19:55


La franja horaria es GMT +2. Ahora son las 23:57:34.


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
Copyright 1996-2007 Club Delphi