JSON – O que é e como usar em AdvPL – Parte 02

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

 

6 comentários sobre “JSON – O que é e como usar em AdvPL – Parte 02

  1. 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

    Curtido 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 😀

      Curtir

  2. 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

    Curtido por 1 pessoa

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s