Introdução
No post anterior — JSON – O que é e como usar em AdvPL — vimos o que é JSON e como fazemos para ler um objeto / arquivo JSON em AdvPL ! Agora, vamos ver como criar e editar um objeto JSON em AdvPL 😀
Criando e/ou editando um JSON em AdvPL
Tão simples quanto ler, é criar ou editar um JSON ! Sim, é isso mesmo. A sintaxe direta de endereçar uma propriedade do Objeto JSON em AdvPL — vista no primeiro post — usando a sintaxe de “array” para endereçar propriedades ( oJson[‘propriedade’] ) também serve para fazer uma atribuição. Veja o exemplo abaixo, criando um objeto JSON em AdvPL e depois obtendo a string que o representa:
User Function JsonNew() oJson := JSonObject():New() oJson['Id'] := 0984 oJson['Nome'] := 'Júlio Wittwer' oJson['Ok'] := .T. oJson['Aniversario'] := ctod('03/03/1976') oJson['Outros'] := JSonObject():New() oJson['Outros']['Sangue'] := 'A+' oJson['Outros']['Eleitor'] := .T. oJson['Outros']['Reservista'] := .T. conout(oJson:ToJson()) Return
Resultado obtido no console:
{“Outros”:{“Eleitor”:true,”Reservista”:true,”Sangue”:”A+”},”Id”:984,”Nome”:”Júlio Wittwer”,”Ok”:true,”Aniversario”:”1976/03/03″}
Ao criar um objeto, cada propriedade que receba uma atribuição é criada dinamicamente. Para criar um objeto como uma propriedade, usamos o construtor JsonObject():New(). Ao criarmos uma propriedade contento uma data em AdvPL, ela será criada no JSON como uma String, no formato AAAA/MM/DD. Os valores .T. (verdadeiro) e .F. (falso) em AdvPL viram respectivamente true e false no JSON. Podemos gerar a representação em texto/string do JSON usando o método toJson(). Consulte a documentação oficial do TDN, existe um método ( JsonObject:Set() ) que permite setar um array diretamente a um objeto JSON.
E para remover uma propriedade ?
Bem, eu acho que essa funcionalidade ainda está para ser criada … Em um JSON, “null” é um valor de propriedade. Logo, se fizermos uma atribuição do valor nulo em AdvPL (NIL) a uma determinada propriedade, ela será representada no JSON com o valor ‘null’, mas não será removida.
Por hora, remover uma propriedade do JSON pode ser feita de uma forma paliativa, atribuindo a uma propriedade um valor fixo, por exemplo a string “#delete#”, e depois de obter a string usando o método toJson(), localizar o texto a ser removido usando por exemplo a função at(), e remover a propriedade e o atributo remontando a string com substr() ou stuff(). — lembrando que uma propriedade pode estar iniciando um objeto, no meio dele, ou finalizado, e que se existe uma vírgula antes e/ou depois da tupla ( “propriedade”:”valor”, uma delas deve ser removida.
Demais considerações
Podemos trabalhar com objetos JSON inclusive maiores que 1MB — desde que você configure o MaxStringSize do Application Server para um novo limite — e com um desempenho muito bom em AdvPL. As sintaxes de acesso direto a propriedades permitem uma abordagem elegante, ágil e simples.
Conclusão
Espero que este conhecimento lhe seja útil, agradeço novamente pela audiência, e desejo a todos TERABYTES DE SUCESSO !!! ❤ Não deixe de consultar os links de referência no final do post.
Referências
Júlio você recomendaria usar-la em locais que não precise do resultado json?
Muitas vezes vejo a utilização de array com índice numérico uma forma complicada em utilizar para obter informação.
Exemplo:
aDados[1] := “NOME”
aDados[2] := 12
Em json
jDados[“NOME”] := “NOME”
jDados[“IDADE”] := 12
CurtirCurtido por 1 pessoa
Humm … é uma idéia bem interessante 😀 Vou fazer alguns testes, eu sei que o acesso às propriedades é muito rápido, existem diferenças intrínsecas entre um array e o objeto JSON, ele pode consumir um pouco mais de memória do que um array, e a forma de iterar nele como um objeto teria que usar um GetNames(), mas não vejo nenhuma contra-indicação em usar dessa forma 😀
CurtirCurtir
[…] o embalo do JSON em AdvPL — JSON – O que é e como usar em AdvPL e JSON – O que é e como usar em AdvPL – Parte 02 — vamos ver como podemos criar uma integração com o MongoDB usando AdvPL […]
CurtirCurtir
Caro Júlio! Bom dia!
Primeiro: Obrigado pelo conteúdo diverso e de primeira, tem ajudado muito e aberto meus olhos para as diversas possibilidades da linguagem ADVPL.
Segundo: Seguindo uma tendência cada vez maior do mercado, tenho estudado sobre integrações de sistemas e ainda hoje vejo que esse assunto não é tão difundido em ADVPL como em outras linguagens, as informações são escassas e muitas vezes pouco exploradas.
Minha sugestão de tema/estudo é falar sobre mensageria, para difundir o conceito de integração segura entre duas partes. Muitas vezes, as pessoas usam troca de arquivos ou Webservices para integrar o Protheus a um sistema legado, porém esses métodos não possuem segurança, garantia de entrega e controle de transações, algo que pode ser obtido (pelo menos em partes) com métodos de mensageria.
Já fiz alguns testes com o componente de fila tAMQP pro Protheus, mas tem sido difícil achar material sobre o assunto… Se puder dar essa força, eu e outros tantos seremos muito gratos.
Mais uma vez, agradeço pela disposição em transmitir seu conhecimento.
Att,
Wanderley R. Neto
CurtirCurtido por 1 pessoa
Opa, eu que agradeço a audiência 🙂 Então, integrações, filas e messageria está no meu radar pra entrar em foco aqui no blog 😀 Aguarde as cenas dos próximos capítulos 😉
CurtirCurtido por 1 pessoa
[…] posts anteriores — JSON – O que é e como usar em AdvPL e JSON – O que é e como usar em AdvPL – Parte 02 — demos uma bola olhada de “o que é” e “como funciona” um JSON, e […]
CurtirCurtir