Montar JSON em Delphi
24/02/2017
0
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
Post mais votado
01/03/2017
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
Mais Posts
27/02/2017
Gutierry Pereira
2 - Pode simplpemente fazer um parser da string com uso da classe TJSONObject e acessar os valores desejados através do método getValue.
01/03/2017
Fernando Tremonti
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;
23/10/2017
Ruy Caribé
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
23/10/2017
Ruy Caribé
26/01/2018
Fábio Valente
06/08/2019
Daniel Pavan
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
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
09/03/2022
Jose Silva
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.
Clique aqui para fazer login e interagir na Comunidade :)