Como Atualizar Dados em JSON no Delphi

Manipular dados em JSON é uma tarefa comum para desenvolvedores, mas no Delphi, essa operação pode parecer desafiadora, especialmente quando se trata de atualizar valores existentes. Neste artigo, vamos explorar como fazer isso de forma eficiente, utilizando um código funcional e organizado.
O Problema
No Delphi, você não pode simplesmente sobrescrever valores em um objeto JSON com uma atribuição direta. Tentar algo como:
EnderecoObj.Values['cidade'] := 'Rio de Janeiro'; // Gera erro
Isso resulta no erro E2129 Cannot assign to a read-only property. A solução é remover a chave existente e depois adicionar o novo valor. Para simplificar esse processo, criamos o método PostValue, que lida automaticamente com a remoção e adição do valor.
O Método PostValue
A função PostValue, que criamos aqui, encapsula a lógica de atualização, tornando o código mais limpo e reutilizável:
procedure PostValue(pObj: TJSONObject; pName: String; pJSONValue: TJSONValue);
var
vJsonPair: TJsonPair;
begin
vJsonPair := pObj.Get(pName);
if Assigned(vJsonPair) then
begin
// Removendo o par existente
pObj.RemovePair(pName);
// Adicionando o novo valor
pObj.AddPair(pName, pJSONValue);
end
else
// Adiciona o par caso ele não exista
pObj.AddPair(pName, pJSONValue);
end;
Exemplo Completo
Abaixo está o exemplo funcional que utiliza o método PostValue para atualizar dados de um JSON.
(*
Criado pelo Professor Giovani Da Cruz
https://giovanidacruz.com.br
*)
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.JSON, System.SysUtils;
procedure PostValue(pObj: TJSONObject; pName: String; pJSONValue: TJSONValue);
var
vJsonPair: TJsonPair;
begin
vJsonPair:= pObj.Get(pName);
if Assigned(vJsonPair) then
begin
//putting the pair at the end of the object
pObj.RemovePair(pName);
pObj.AddPair(pName, pJSONValue);
end
else
pObj.AddPair(pName, pJSONValue);
end;
var
JSONObj, EnderecoObj: TJSONObject;
JSONString: string;
begin
// JSON inicial
JSONString := '{ "usuario": { "nome": "João", "idade": 30, "endereco": { "cidade": "São Paulo", "estado": "SP" } } }';
// Carregando o JSON
JSONObj := TJSONObject.ParseJSONValue(JSONString) as TJSONObject;
try
// Obtendo o objeto "endereco"
EnderecoObj := JSONObj.GetValue<TJSONObject>('usuario.endereco');
if Assigned(EnderecoObj) then
begin
// Atualizando a Cidade
PostValue(EnderecoObj, 'cidade', TJSONString.Create('Rio de Janeiro'));
// Atualizando o Estado
PostValue(EnderecoObj, 'estado', TJSONString.Create('RJ'));
end;
// Exibindo o JSON atualizado
Writeln(JSONObj.ToJSON);
Readln;
finally
// Liberando memória
JSONObj.Free;
end;
end.
Resultado
Após executar o código, o JSON é atualizado com sucesso, e o resultado final é:
{
"usuario": {
"nome": "João",
"idade": 30,
"endereco": {
"cidade": "Rio de Janeiro",
"estado": "RJ"
}
}
}
Pontos de Atenção
- Memória: Sempre libere os objetos JSON criados usando
Freepara evitar vazamentos de memória. - Reutilização: O método
PostValuepode ser usado em qualquer parte do seu código para atualizar valores de objetos JSON. - Validação: Antes de manipular, sempre verifique se o objeto retornado está atribuindo usando
Assigned.
Conclusão
Com o método PostValue, você pode atualizar objetos JSON no Delphi de forma elegante e eficiente. Essa abordagem é ideal para aplicações que manipulam dados complexos e necessitam de uma forma simples de manter os valores atualizados.
💬 Gostou do conteúdo? Tem algo a acrescentar?
Deixe seu comentário abaixo! 🤔
Adoraria saber sua opinião sobre como atualizar dados em JSON no Delphi. Se você tem dicas ou dúvidas, compartilhe com a gente! 🚀
🔧 Vamos trocar ideias e aprender juntos!
💻 Compartilhe o post com outras pessoas se ele te ajudou! 😊
📚 Obrigado por acompanhar até aqui! Explore outros posts relacionados no blog e continue evoluindo suas habilidades. Tem mais conteúdos sobre diversos assuntos te esperando! 👩💻 🔍✨
Até o próximo post. Valeu! 👋📖
#Delphi #JSON #Programação #Desenvolvimento
#Tecnologia #DicasDeProgramação #Codificando #BancoDeDados
#Desenvolvedor #Tutorial
#GiovaniDaCruz