Problema ao gerar arquivo JSON

Delphi

16/06/2015

Estou com problema na estrutura do arquivo quando gera uma lista de objetos. Segue abaixo o exemplo.


{"ecf":"BE050669200009001330","cliente":"000001","fazenda":"0003","dataHoraTerminoTrans":"2015-06-08T15:14:30.000Z","coo":"20711","itensCupom":{"items":[{"produto":"02.060018","descItens":0,"descVal":0,"seqItem":1,"qtdVendida":1,"valUnit":38,"statusItem":"siEmitido"}],"count":1,"arrayManager":{}},"dataHoraInicioTrans":"2015-06-08T15:14:34.000Z","dataEmissao":"2015-06-08T00:00:00.000Z","operador":"73","ccf":"10121","terminal":"","statusCupom":"scEmitido","loja":"01383192000125"}],"count":1,"arrayManager":{}}


Quando for lista eu não queria que aparecesse essa anotação {"items": e nem "count":1,"arrayManager":{} no final de cada arquivo. Tem alguma configuração ou anotação que remova isso?

Estou usando Delphi XE6 com a Unit REST.JsonReflect;
Danilo Pereira

Danilo Pereira

Curtidas 0

Respostas

Danilo Pereira

Danilo Pereira

16/06/2015

Consegui resolver o problema, descobri que esses valores são gerados quando se usa o TList para gerar lista de objetos, uma solução seria trocar para o TArray. Mas consegui retirar esses valores utilizando o StringReplace. Segue abaixo como ficou a função:

function THelper.ObjetoToJson(value: TObject): String;
var lMarshal : TJSONMarshal;
    valorString:String;
    i:integer;
    valor:String;
begin
  lMarshal := TJSONMarshal.Create (TJSONConverter.Create);
  valorString := lMarshal.Marshal(value).ToString();
  valorString := StringReplace(valorString,'{"items":','',[rfReplaceAll, rfIgnoreCase]);
  valorString := StringReplace(valorString,'"arrayManager":{}}','',[rfReplaceAll, rfIgnoreCase]);

 while pos(',"count":',valorString)> 0 do
   begin

     valor:= copy(valorString, pos(',"count":',valorString)+8,4);
     valor := StringReplace(StringReplace(StringReplace(valor,':','',[]),',','',[]),',','',[]);

    if Length(trim(valor))= 1 then
      valorString := StringReplace(valorString,copy(valorString, pos(',"count":',valorString)+0,11),'',[])
    else if Length(trim(valor))= 2 then
      valorString := StringReplace(valorString,copy(valorString, pos(',"count":',valorString)+0,12),'',[])
    else if Length(trim(valor))= 3 then
      valorString := StringReplace(valorString,copy(valorString, pos(',"count":',valorString)+0,13),'',[]);
   end;

  result := valorString;
end;

GOSTEI 0
POSTAR