Montar JSON em Delphi

24/02/2017

0

Oi pessoal, tudo bem?

Como posso fazer este JSON em Delphi?

Obrigado!

{ "InformacoesConta": { "Contas": { "Contas": [ { "Info1": "8595", "Info2": "2959", "Info3": 0, "Info4": 51, "Info5": "30/11/2015", "Info6": "XSPWXG KPIUODEHYZB 15112463481", "Info7": 211.57, "Info8": "GODOFREDO R", "Info9": "201", "Info10": "FID", "Info11": "BLUBLU", "Info12": "JS", "Info13": "1542154", "Info14": "C", "Info15": "C" } ] }, "Status": "OK" } }
Fernando Tremonti

Fernando Tremonti

Responder

Post mais votado

01/03/2017

Boa tarde,
Dessa forma acho que pode ficar um pouco confuso para manutenção, outra coisa que seus JSON não parece estar muito bem estruturado, inclusive o primeiro que passou como exemplo.
Uma dica seria você organizar em classes e gerar um json a partir dela:

  TEnderecoDTO = class
    private
      FLogradouro : String;
      FNumero     : String;
      FBairro     : String;
      FCep        : String;
      FCidade     : String;
      FEstado     : String;
    published
      property Logradouro : String read FLogradouro write FLogradouro;
      property Numero     : String read FNumero     write FNumero    ;
      property Bairro     : String read FBairro     write FBairro    ;
      property Cep        : String read FCep        write FCep       ;
      property Cidade     : String read FCidade     write FCidade    ;
      property Estado     : String read FEstado     write FEstado    ;
  end;

  TInformacoesContasDTO = class
    private
      fInfo1 : String;
      fInfo2 : String;
      fInfo3 : String;
      fInfo4 : String;
    published
      property Info1 : String read fInfo1 write fInfo1 ;
      property Info2 : String read fInfo2 write fInfo2 ;
      property Info3 : String read fInfo3 write fInfo3 ;
      property Info4 : String read fInfo4 write fInfo4 ;
  end;

  TArrayInformacoesContasDTO = array of TInformacoesContasDTO;

  TCooperadoDTO = class
    private
      FCnpjCooperativa    : String;
      FDocumentoCooperado : String;
      //...
      FEndereco           : TEnderecoDTO;
      FContas             : TArrayInformacoesContasDTO;
    published
      property CnpjCooperativa    : String                     read FCnpjCooperativa    write FCnpjCooperativa    ;
      property DocumentoCooperado : String                     read FDocumentoCooperado write FDocumentoCooperado ;
      //...
      property Endereco           : TEnderecoDTO               read FEndereco           write FEndereco           ;
      property Contas             : TArrayInformacoesContasDTO read FContas             write FContas             ;
  end;



Para gerar o JSON basta fazer assim agora:

var
  CooperadoDTO : TCooperadoDTO;
  Endereco     : TEnderecoDTO;
  Informacoes  : TArrayInformacoesContasDTO;
  Informacao   : TInformacoesContasDTO;

  json         : TStringList;
begin

  json         := TStringList.Create;
  CooperadoDTO := TCooperadoDTO.Create;
  Endereco     := TEnderecoDTO.Create;
  try
    CooperadoDTO.CnpjCooperativa    := '123456789';
    CooperadoDTO.DocumentoCooperado := 'lbalbalbalba';

    Endereco.Numero     := '123';
    Endereco.Logradouro := 'Rua 12 bla';
    Endereco.Cep        := '99999999'  ;
    Endereco.Bairro     := 'Meu Bairro';
    Endereco.Cidade     := 'City 2000' ;
    Endereco.Estado     := 'UF'        ;

    CooperadoDTO.Endereco           := Endereco;

    SetLength(Informacoes,2);

    Informacao   := TInformacoesContasDTO.Create;
    Informacao.fInfo1 := '1.00-01';
    Informacao.fInfo2 := '1.00-02';
    Informacao.fInfo3 := '1.00-03';
    Informacao.fInfo4 := '1.00-04';

    Informacoes[0] := Informacao;

    Informacao   := TInformacoesContasDTO.Create;
    Informacao.fInfo1 := '2.00-01';
    Informacao.fInfo2 := '2.00-02';
    Informacao.fInfo3 := '2.00-03';
    Informacao.fInfo4 := '2.00-04';

    Informacoes[1] := Informacao;

    CooperadoDTO.Contas := Informacoes;

    json.Text := TJson.ObjectToJsonString(CooperadoDTO);
    json.SaveToFile('<caminho_onde_deseja_salvar>');
  finally
    FreeAndNil(Endereco);
    FreeAndNil(CooperadoDTO);
    FreeAndNil(json);
  end;
end;


Declare a unit Rest.Json no uses.

Dessa forma seu resultado será semelhante a isso:
{
"cnpjCooperativa": "123456789",
"documentoCooperado": "lbalbalbalba",
"endereco": {
"logradouro": "Rua 12 bla",
"numero": "123",
"bairro": "Meu Bairro",
"cep": "99999999",
"cidade": "City 2000",
"estado": "UF"
},
"contas": [{
"info1": "1.00-01",
"info2": "1.00-02",
"info3": "1.00-03",
"info4": "1.00-04"
}, {
"info1": "2.00-01",
"info2": "2.00-02",
"info3": "2.00-03",
"info4": "2.00-04"
}]
}

Espero que tenha ajudado.

Abraços

Gutierry Pereira

Gutierry Pereira
Responder

Mais Posts

27/02/2017

Gutierry Pereira

1 - Você pode criar um objeto representante, sendo ele um o objeto da classe de InformacoesContas onde tem um array ou coleção de contas e usar a classe TJSONObject para converter a string em um objeto.

2 - Pode simplpemente fazer um parser da string com uso da classe TJSONObject e acessar os valores desejados através do método getValue.
Responder

01/03/2017

Fernando Tremonti

Fiz algo neste sentido,

Mas a estrutura não ficou igual:

      LJsonObject := TJSONObject.Create;
      LInfoContas := TJSONArray.Create;
      LContas     := TJSONArray.Create;

      while not Eof do
      begin
        LJson := TJSONObject.Create;
        LJson.AddPair(TJSONPair.Create('CnpjCooperativa'  , TJSONString.Create(FieldByName('CNPJCOOPERATIVA').Value )));
        LJson.AddPair(TJSONPair.Create('DocumentoCooperado', TJSONString.Create(FieldByName('nrCpfCnpj').Value )));
        LJson.AddPair(TJSONPair.Create('AgenciaCooperado' , TJSONNumber.Create(FieldByName('AgenciaCooperado').Value )));
        LJson.AddPair(TJSONPair.Create('ContaCooperado' , TJSONNumber.Create(FieldByName('ContaCooperado').Value )));
        LJson.AddPair(TJSONPair.Create('ContaDesde'     , TJSONString.Create(DateToStr(FieldByName('ContaDesde').Value) )));
        LJson.AddPair(TJSONPair.Create('NomeCooperado'  , TJSONString.Create(FieldByName('NmPrimTl').Value )));
        LJson.AddPair(TJSONPair.Create('SaldoDisponivel', TJSONNumber.Create(FieldByName('SaldoDisponivel').Value )));
        LJson.AddPair(TJSONPair.Create('Logradouro'     , TJSONString.Create(FieldByName('dsEndere').Value )));
        LJson.AddPair(TJSONPair.Create('Numero'         , TJSONString.Create(FieldByName('numero').Value )));
        LJson.AddPair(TJSONPair.Create('Bairro'         , TJSONString.Create(FieldByName('nmbairro').Value )));
        LJson.AddPair(TJSONPair.Create('Cidade'         , TJSONString.Create(FieldByName('nmCidade').Value )));
        LJson.AddPair(TJSONPair.Create('Estado'         , TJSONString.Create(FieldByName('cdUFEnd').Value )));
        LJson.AddPair(TJSONPair.Create('Cep'            , TJSONString.Create(FieldByName('nrCEPEnd').Value )));
        LJson.AddPair(TJSONPair.Create('TipoProduto'    , TJSONString.Create(FieldByName('TipoProduto').Value )));
        LJson.AddPair(TJSONPair.Create('StatusCooperado', TJSONString.Create(FieldByName('StatusCooperado').Value )));
        LContas.Add(LJson);
        Next;
      end;

      LJsonObject.AddPair(TJSONPair.Create('InformacoesContas', LContas ));

      result := LJsonObject;
    end;
Responder

23/10/2017

Ruy Caribé

Boa tarde,
Dessa forma acho que pode ficar um pouco confuso para manutenção, outra coisa que seus JSON não parece estar muito bem estruturado, inclusive o primeiro que passou como exemplo.
Uma dica seria você organizar em classes e gerar um json a partir dela:

  TEnderecoDTO = class
    private
      FLogradouro : String;
      FNumero     : String;
      FBairro     : String;
      FCep        : String;
      FCidade     : String;
      FEstado     : String;
    published
      property Logradouro : String read FLogradouro write FLogradouro;
      property Numero     : String read FNumero     write FNumero    ;
      property Bairro     : String read FBairro     write FBairro    ;
      property Cep        : String read FCep        write FCep       ;
      property Cidade     : String read FCidade     write FCidade    ;
      property Estado     : String read FEstado     write FEstado    ;
  end;

  TInformacoesContasDTO = class
    private
      fInfo1 : String;
      fInfo2 : String;
      fInfo3 : String;
      fInfo4 : String;
    published
      property Info1 : String read fInfo1 write fInfo1 ;
      property Info2 : String read fInfo2 write fInfo2 ;
      property Info3 : String read fInfo3 write fInfo3 ;
      property Info4 : String read fInfo4 write fInfo4 ;
  end;

  TArrayInformacoesContasDTO = array of TInformacoesContasDTO;

  TCooperadoDTO = class
    private
      FCnpjCooperativa    : String;
      FDocumentoCooperado : String;
      //...
      FEndereco           : TEnderecoDTO;
      FContas             : TArrayInformacoesContasDTO;
    published
      property CnpjCooperativa    : String                     read FCnpjCooperativa    write FCnpjCooperativa    ;
      property DocumentoCooperado : String                     read FDocumentoCooperado write FDocumentoCooperado ;
      //...
      property Endereco           : TEnderecoDTO               read FEndereco           write FEndereco           ;
      property Contas             : TArrayInformacoesContasDTO read FContas             write FContas             ;
  end;



Para gerar o JSON basta fazer assim agora:

var
  CooperadoDTO : TCooperadoDTO;
  Endereco     : TEnderecoDTO;
  Informacoes  : TArrayInformacoesContasDTO;
  Informacao   : TInformacoesContasDTO;

  json         : TStringList;
begin

  json         := TStringList.Create;
  CooperadoDTO := TCooperadoDTO.Create;
  Endereco     := TEnderecoDTO.Create;
  try
    CooperadoDTO.CnpjCooperativa    := ''123456789'';
    CooperadoDTO.DocumentoCooperado := ''lbalbalbalba'';

    Endereco.Numero     := ''123'';
    Endereco.Logradouro := ''Rua 12 bla'';
    Endereco.Cep        := ''99999999''  ;
    Endereco.Bairro     := ''Meu Bairro'';
    Endereco.Cidade     := ''City 2000'' ;
    Endereco.Estado     := ''UF''        ;

    CooperadoDTO.Endereco           := Endereco;

    SetLength(Informacoes,2);

    Informacao   := TInformacoesContasDTO.Create;
    Informacao.fInfo1 := ''1.00-01'';
    Informacao.fInfo2 := ''1.00-02'';
    Informacao.fInfo3 := ''1.00-03'';
    Informacao.fInfo4 := ''1.00-04'';

    Informacoes[0] := Informacao;

    Informacao   := TInformacoesContasDTO.Create;
    Informacao.fInfo1 := ''2.00-01'';
    Informacao.fInfo2 := ''2.00-02'';
    Informacao.fInfo3 := ''2.00-03'';
    Informacao.fInfo4 := ''2.00-04'';

    Informacoes[1] := Informacao;

    CooperadoDTO.Contas := Informacoes;

    json.Text := TJson.ObjectToJsonString(CooperadoDTO);
    json.SaveToFile(''<caminho_onde_deseja_salvar>'');
  finally
    FreeAndNil(Endereco);
    FreeAndNil(CooperadoDTO);
    FreeAndNil(json);
  end;
end;


Declare a unit Rest.Json no uses.

Dessa forma seu resultado será semelhante a isso:
{
"cnpjCooperativa": "123456789",
"documentoCooperado": "lbalbalbalba",
"endereco": {
"logradouro": "Rua 12 bla",
"numero": "123",
"bairro": "Meu Bairro",
"cep": "99999999",
"cidade": "City 2000",
"estado": "UF"
},
"contas": [{
"info1": "1.00-01",
"info2": "1.00-02",
"info3": "1.00-03",
"info4": "1.00-04"
}, {
"info1": "2.00-01",
"info2": "2.00-02",
"info3": "2.00-03",
"info4": "2.00-04"
}]
}

Espero que tenha ajudado.

Abraços

Boa tarde, como faço pra entrar em contato com você? meu skype ruicaribe @ gmail .com
Responder

23/10/2017

Ruy Caribé

Boa tarde, como faço pra entrar em contato com você? meu skype ruicaribe @ gmail .com
Responder

26/01/2018

Fábio Valente

Cara, segui o seu exemplo e funcionou perfeitamente para o que precisava! Muito obrigado pela colaboração com a comunidade!
Responder

06/08/2019

Daniel Pavan

Boa Noite Gutierry Pereira!

Sei que o Post é antigo, mas me interessei muito pela transparência pela qual são geradas as informações para o json com a utilização de classes.
Porém, veja se consegue me ajudar.
Estou usando RAD Studio XE 8.0 e não consigo declarar a uses REST.Json.
Para testar seu exemplo Criei uma nova aplicação "VCL Forms Application - Delphi".

Desde já agradeço se puder me orientar.

Grande Agraço!

Daniel

Boa tarde,
Dessa forma acho que pode ficar um pouco confuso para manutenção, outra coisa que seus JSON não parece estar muito bem estruturado, inclusive o primeiro que passou como exemplo.
Uma dica seria você organizar em classes e gerar um json a partir dela:

  TEnderecoDTO = class
    private
      FLogradouro : String;
      FNumero     : String;
      FBairro     : String;
      FCep        : String;
      FCidade     : String;
      FEstado     : String;
    published
      property Logradouro : String read FLogradouro write FLogradouro;
      property Numero     : String read FNumero     write FNumero    ;
      property Bairro     : String read FBairro     write FBairro    ;
      property Cep        : String read FCep        write FCep       ;
      property Cidade     : String read FCidade     write FCidade    ;
      property Estado     : String read FEstado     write FEstado    ;
  end;

  TInformacoesContasDTO = class
    private
      fInfo1 : String;
      fInfo2 : String;
      fInfo3 : String;
      fInfo4 : String;
    published
      property Info1 : String read fInfo1 write fInfo1 ;
      property Info2 : String read fInfo2 write fInfo2 ;
      property Info3 : String read fInfo3 write fInfo3 ;
      property Info4 : String read fInfo4 write fInfo4 ;
  end;

  TArrayInformacoesContasDTO = array of TInformacoesContasDTO;

  TCooperadoDTO = class
    private
      FCnpjCooperativa    : String;
      FDocumentoCooperado : String;
      //...
      FEndereco           : TEnderecoDTO;
      FContas             : TArrayInformacoesContasDTO;
    published
      property CnpjCooperativa    : String                     read FCnpjCooperativa    write FCnpjCooperativa    ;
      property DocumentoCooperado : String                     read FDocumentoCooperado write FDocumentoCooperado ;
      //...
      property Endereco           : TEnderecoDTO               read FEndereco           write FEndereco           ;
      property Contas             : TArrayInformacoesContasDTO read FContas             write FContas             ;
  end;



Para gerar o JSON basta fazer assim agora:

var
  CooperadoDTO : TCooperadoDTO;
  Endereco     : TEnderecoDTO;
  Informacoes  : TArrayInformacoesContasDTO;
  Informacao   : TInformacoesContasDTO;

  json         : TStringList;
begin

  json         := TStringList.Create;
  CooperadoDTO := TCooperadoDTO.Create;
  Endereco     := TEnderecoDTO.Create;
  try
    CooperadoDTO.CnpjCooperativa    := ''123456789'';
    CooperadoDTO.DocumentoCooperado := ''lbalbalbalba'';

    Endereco.Numero     := ''123'';
    Endereco.Logradouro := ''Rua 12 bla'';
    Endereco.Cep        := ''99999999''  ;
    Endereco.Bairro     := ''Meu Bairro'';
    Endereco.Cidade     := ''City 2000'' ;
    Endereco.Estado     := ''UF''        ;

    CooperadoDTO.Endereco           := Endereco;

    SetLength(Informacoes,2);

    Informacao   := TInformacoesContasDTO.Create;
    Informacao.fInfo1 := ''1.00-01'';
    Informacao.fInfo2 := ''1.00-02'';
    Informacao.fInfo3 := ''1.00-03'';
    Informacao.fInfo4 := ''1.00-04'';

    Informacoes[0] := Informacao;

    Informacao   := TInformacoesContasDTO.Create;
    Informacao.fInfo1 := ''2.00-01'';
    Informacao.fInfo2 := ''2.00-02'';
    Informacao.fInfo3 := ''2.00-03'';
    Informacao.fInfo4 := ''2.00-04'';

    Informacoes[1] := Informacao;

    CooperadoDTO.Contas := Informacoes;

    json.Text := TJson.ObjectToJsonString(CooperadoDTO);
    json.SaveToFile(''<caminho_onde_deseja_salvar>'');
  finally
    FreeAndNil(Endereco);
    FreeAndNil(CooperadoDTO);
    FreeAndNil(json);
  end;
end;


Declare a unit Rest.Json no uses.

Dessa forma seu resultado será semelhante a isso:
{
"cnpjCooperativa": "123456789",
"documentoCooperado": "lbalbalbalba",
"endereco": {
"logradouro": "Rua 12 bla",
"numero": "123",
"bairro": "Meu Bairro",
"cep": "99999999",
"cidade": "City 2000",
"estado": "UF"
},
"contas": [{
"info1": "1.00-01",
"info2": "1.00-02",
"info3": "1.00-03",
"info4": "1.00-04"
}, {
"info1": "2.00-01",
"info2": "2.00-02",
"info3": "2.00-03",
"info4": "2.00-04"
}]
}

Espero que tenha ajudado.

Abraços
Responder

09/03/2022

Jose Silva

Boa tarde,
Dessa forma acho que pode ficar um pouco confuso para manutenção, outra coisa que seus JSON não parece estar muito bem estruturado, inclusive o primeiro que passou como exemplo.
Uma dica seria você organizar em classes e gerar um json a partir dela:

  TEnderecoDTO = class
    private
      FLogradouro : String;
      FNumero     : String;
      FBairro     : String;
      FCep        : String;
      FCidade     : String;
      FEstado     : String;
    published
      property Logradouro : String read FLogradouro write FLogradouro;
      property Numero     : String read FNumero     write FNumero    ;
      property Bairro     : String read FBairro     write FBairro    ;
      property Cep        : String read FCep        write FCep       ;
      property Cidade     : String read FCidade     write FCidade    ;
      property Estado     : String read FEstado     write FEstado    ;
  end;

  TInformacoesContasDTO = class
    private
      fInfo1 : String;
      fInfo2 : String;
      fInfo3 : String;
      fInfo4 : String;
    published
      property Info1 : String read fInfo1 write fInfo1 ;
      property Info2 : String read fInfo2 write fInfo2 ;
      property Info3 : String read fInfo3 write fInfo3 ;
      property Info4 : String read fInfo4 write fInfo4 ;
  end;

  TArrayInformacoesContasDTO = array of TInformacoesContasDTO;

  TCooperadoDTO = class
    private
      FCnpjCooperativa    : String;
      FDocumentoCooperado : String;
      //...
      FEndereco           : TEnderecoDTO;
      FContas             : TArrayInformacoesContasDTO;
    published
      property CnpjCooperativa    : String                     read FCnpjCooperativa    write FCnpjCooperativa    ;
      property DocumentoCooperado : String                     read FDocumentoCooperado write FDocumentoCooperado ;
      //...
      property Endereco           : TEnderecoDTO               read FEndereco           write FEndereco           ;
      property Contas             : TArrayInformacoesContasDTO read FContas             write FContas             ;
  end;



Para gerar o JSON basta fazer assim agora:

var
  CooperadoDTO : TCooperadoDTO;
  Endereco     : TEnderecoDTO;
  Informacoes  : TArrayInformacoesContasDTO;
  Informacao   : TInformacoesContasDTO;

  json         : TStringList;
begin

  json         := TStringList.Create;
  CooperadoDTO := TCooperadoDTO.Create;
  Endereco     := TEnderecoDTO.Create;
  try
    CooperadoDTO.CnpjCooperativa    := '123456789';
    CooperadoDTO.DocumentoCooperado := 'lbalbalbalba';

    Endereco.Numero     := '123';
    Endereco.Logradouro := 'Rua 12 bla';
    Endereco.Cep        := '99999999'  ;
    Endereco.Bairro     := 'Meu Bairro';
    Endereco.Cidade     := 'City 2000' ;
    Endereco.Estado     := 'UF'        ;

    CooperadoDTO.Endereco           := Endereco;

    SetLength(Informacoes,2);

    Informacao   := TInformacoesContasDTO.Create;
    Informacao.fInfo1 := '1.00-01';
    Informacao.fInfo2 := '1.00-02';
    Informacao.fInfo3 := '1.00-03';
    Informacao.fInfo4 := '1.00-04';

    Informacoes[0] := Informacao;

    Informacao   := TInformacoesContasDTO.Create;
    Informacao.fInfo1 := '2.00-01';
    Informacao.fInfo2 := '2.00-02';
    Informacao.fInfo3 := '2.00-03';
    Informacao.fInfo4 := '2.00-04';

    Informacoes[1] := Informacao;

    CooperadoDTO.Contas := Informacoes;

    json.Text := TJson.ObjectToJsonString(CooperadoDTO);
    json.SaveToFile('<caminho_onde_deseja_salvar>');
  finally
    FreeAndNil(Endereco);
    FreeAndNil(CooperadoDTO);
    FreeAndNil(json);
  end;
end;


Declare a unit Rest.Json no uses.

Dessa forma seu resultado será semelhante a isso:
{
"cnpjCooperativa": "123456789",
"documentoCooperado": "lbalbalbalba",
"endereco": {
"logradouro": "Rua 12 bla",
"numero": "123",
"bairro": "Meu Bairro",
"cep": "99999999",
"cidade": "City 2000",
"estado": "UF"
},
"contas": [{
"info1": "1.00-01",
"info2": "1.00-02",
"info3": "1.00-03",
"info4": "1.00-04"
}, {
"info1": "2.00-01",
"info2": "2.00-02",
"info3": "2.00-03",
"info4": "2.00-04"
}]
}

Espero que tenha ajudado.

Abraços


Achei muito bom isso. Ainda não manipulei arquivos JSON com Delphi, mas é bacana saber que pode ser feito desta forma, o reaproveitamento da classe é muito vantajoso.
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar