JsonToObject
boa noite a todos!
Tenho o seguinte Json:
{"pre_venda": {
"COD_BOLETA": 1025,
"LOJA": 999,
"DATAMOV": "05/12/2016",
"HORA": "14:30:35",
"VALORTOTAL": "200.00",
"DESCONTO": "30.00",
"ACRESCIMO": "",
"LIQUIDO": "170.00",
"STATUS": 1,
"VENDEDOR": "1",
"CLIENTE": 1,
"NOMECLIENTE": "DIEGO BUENO SAMPAIO",
"DOCCLIENTE": "40177451807",
"USU_PREVENDA": "1",
"USU_ESTORNO": "",
"MOTIVO": "",
"ORIGEM": "V",
"FP_PGTO": "DINHEIRO",
"produtos": [
{"LOJA": 999,
"PRODUTO": "2030002",
"TAMANHO": "36",
"QUANTIDADE": 1,
"VALOR": "140.00",
"DESCONTO": "30.00",
"LIQUIDO": "110.00",
"COR": 1806,
"CODIGOBARRA": "0203000100027",
"DESCRICAO": "CAMPESI L1701 SAPATO FEMININO",
"TOTAL": "110.00",
"ITEM": "1",
"UNIDADE": "1",
"TIPO": "VD",
"MOTIVO": ""},
{"LOJA": 999,
"PRODUTO": "2030001",
"TAMANHO": "35",
"QUANTIDADE": 1,
"VALOR": "140.00",
"DESCONTO": "0",
"LIQUIDO": "140.00",
"COR": 1805,
"CODIGOBARRA": "0203000100026",
"DESCRICAO": "CAMPESI L1701 SAPATO FEMININO",
"TOTAL": "140.00",
"ITEM": "1",
"UNIDADE": "1",
"TIPO": "VD",
"MOTIVO": ""}
]
}}
Preciso transformar isso em objeto, para fazer os insert's no banco, será que alguém pode me dar uma luz? Estou utilizando o Delphi XE 10. Dei uma olhada no forum, mas nada está funcioando.
:/
Tenho o seguinte Json:
{"pre_venda": {
"COD_BOLETA": 1025,
"LOJA": 999,
"DATAMOV": "05/12/2016",
"HORA": "14:30:35",
"VALORTOTAL": "200.00",
"DESCONTO": "30.00",
"ACRESCIMO": "",
"LIQUIDO": "170.00",
"STATUS": 1,
"VENDEDOR": "1",
"CLIENTE": 1,
"NOMECLIENTE": "DIEGO BUENO SAMPAIO",
"DOCCLIENTE": "40177451807",
"USU_PREVENDA": "1",
"USU_ESTORNO": "",
"MOTIVO": "",
"ORIGEM": "V",
"FP_PGTO": "DINHEIRO",
"produtos": [
{"LOJA": 999,
"PRODUTO": "2030002",
"TAMANHO": "36",
"QUANTIDADE": 1,
"VALOR": "140.00",
"DESCONTO": "30.00",
"LIQUIDO": "110.00",
"COR": 1806,
"CODIGOBARRA": "0203000100027",
"DESCRICAO": "CAMPESI L1701 SAPATO FEMININO",
"TOTAL": "110.00",
"ITEM": "1",
"UNIDADE": "1",
"TIPO": "VD",
"MOTIVO": ""},
{"LOJA": 999,
"PRODUTO": "2030001",
"TAMANHO": "35",
"QUANTIDADE": 1,
"VALOR": "140.00",
"DESCONTO": "0",
"LIQUIDO": "140.00",
"COR": 1805,
"CODIGOBARRA": "0203000100026",
"DESCRICAO": "CAMPESI L1701 SAPATO FEMININO",
"TOTAL": "140.00",
"ITEM": "1",
"UNIDADE": "1",
"TIPO": "VD",
"MOTIVO": ""}
]
}}
Preciso transformar isso em objeto, para fazer os insert's no banco, será que alguém pode me dar uma luz? Estou utilizando o Delphi XE 10. Dei uma olhada no forum, mas nada está funcioando.
:/
Rubens Filho
Curtidas 0
Melhor post
Gutierry Pereira
06/12/2016
Boa noite,
Ante-mão para fazer a deserialização desse JSOn vc deve ter um objeto com as mesmas propriedades que o mesmo. Você já esta de posse dessa classe?
De posse dessa classe uma solução é o uso do TJson.JsonToObject<TSuaClasse>(SeuJSON);
Espero ter ajudado.
Att Gutierry Antonio
Ante-mão para fazer a deserialização desse JSOn vc deve ter um objeto com as mesmas propriedades que o mesmo. Você já esta de posse dessa classe?
De posse dessa classe uma solução é o uso do TJson.JsonToObject<TSuaClasse>(SeuJSON);
Espero ter ajudado.
Att Gutierry Antonio
GOSTEI 1
Mais Respostas
Rubens Filho
06/12/2016
Buenas Gutierry Antonio!!
Sim, tenho as classes que representam os objetos, mas ai que vem o problema, a classe é prevenda, com suas propriedades, até ai blz!! Mas, na prevenda, tenho uma propriedade produtos, que é um ObjectList de produto, e é exatamente esse objectlist que não consigo popular com os dados do json.
Ao que parece, a função TJson.JsonToObject<TSuaClasse>(SeuJSON), trabalha apenas com objetos simples...
Att,
Sim, tenho as classes que representam os objetos, mas ai que vem o problema, a classe é prevenda, com suas propriedades, até ai blz!! Mas, na prevenda, tenho uma propriedade produtos, que é um ObjectList de produto, e é exatamente esse objectlist que não consigo popular com os dados do json.
Ao que parece, a função TJson.JsonToObject<TSuaClasse>(SeuJSON), trabalha apenas com objetos simples...
Att,
GOSTEI 0
Gutierry Pereira
06/12/2016
Boa noite meu caro,
pode criar um metodo wrap na sua classe principal e ela percorrer sua lista no json e deseralizar os subobjetos.
pode criar um metodo wrap na sua classe principal e ela percorrer sua lista no json e deseralizar os subobjetos.
GOSTEI 0
Rubens Filho
06/12/2016
Gutierry, poderia dar mais detalhes? Esse termo é novo para mim. Na vdd nem faço ideia do que seria isso.
;)
;)
GOSTEI 0
Gutierry Pereira
06/12/2016
Heeheh, de boa..
No seu caso nem seria bem o wrap e sim um wrapping. Que o wrap(embrulhar) é o "nome" que se da para o metodo que vai fazer tranfomar se elemento em um DTO(Data transfer object) para a serialização. Mas ve pode dar qualquer nome a esse metodo, no delphi é muito comum o uso do assign para isso :D.
e o wrapping(desembrulhar) hahahah, seria o metodo que deserializaria, que pegaria e faria o oposto, pegar o DTO e desempacotar no objeto.
Assim você pode criar um metodo assign em sua classe, e esse metodo recebendo um JSON por parametro onde ele percorre o json e retorna seu objeto. Se desejar esse metodo pode ser estatico, assim esse metodo não só iria atribuir os valores do json para a classe como iria criar, atribuir e retornar o objeto atribuido.
Mas o mais legivel seria esse metodo não se estatico ai teria algo assim.
Uma outr solução seria o metodo create recber esse json e no create você acionar o metodo de assign
:D
qualquer coisa estou a disposição.
Abraços..
No seu caso nem seria bem o wrap e sim um wrapping. Que o wrap(embrulhar) é o "nome" que se da para o metodo que vai fazer tranfomar se elemento em um DTO(Data transfer object) para a serialização. Mas ve pode dar qualquer nome a esse metodo, no delphi é muito comum o uso do assign para isso :D.
e o wrapping(desembrulhar) hahahah, seria o metodo que deserializaria, que pegaria e faria o oposto, pegar o DTO e desempacotar no objeto.
Assim você pode criar um metodo assign em sua classe, e esse metodo recebendo um JSON por parametro onde ele percorre o json e retorna seu objeto. Se desejar esse metodo pode ser estatico, assim esse metodo não só iria atribuir os valores do json para a classe como iria criar, atribuir e retornar o objeto atribuido.
Mas o mais legivel seria esse metodo não se estatico ai teria algo assim.
var meuObjeto : TMinhaClasse; begin meuObjeto :=MinhaClasse.create(); meuObjeto.assign(MeuJSON) end;
Uma outr solução seria o metodo create recber esse json e no create você acionar o metodo de assign
var meuObjeto : TMinhaClasse; begin meuObjeto :=MinhaClasse.create(MeuJSON); end;
:D
qualquer coisa estou a disposição.
Abraços..
GOSTEI 0