Função ArrToJson para transformar um Array numa String JSON – Maratona AdvPL e TL++ 040

Nesse vídeo demonstraremos em como utilizar a função ArrToJson, que pega um Array e transforma em uma string no formato JSON.

Abaixo o código fonte desenvolvido para o exemplo em vídeo acima:

//Bibliotecas
#Include "TOTVS.ch"

/*/{Protheus.doc} User Function zExe040
Exemplo de função que converte um Array para uma String em JSON
@type Function
@author Atilio
@since 28/11/2022
@obs 
    Função ArrToJson
    Parâmetros
        + Array que será convertido para uma String em JSON
    Retorno
        + Texto da String em JSON

    **** Apoie nosso projeto, se inscreva em https://www.youtube.com/TerminalDeInformacao ****
/*/

User Function zExe040()
    Local aArea    := FWGetArea()
    Local aDados   := {}
    Local cResult  := ""

    //Adiciona informações no Array
    aAdd(aDados, {"Site", "Terminal de Informação"})
    aAdd(aDados, {"URL",  "https://terminaldeinformacao.com"})

    //Transforma o Array em uma String JSON
    cResult := ArrToJson(aDados)

    //Mostra o resultado
    FWAlertInfo("cResult é " + cResult, "Resultado do ArrToJson")

    FWRestArea(aArea)
Return

Bom pessoal, por hoje é só.
Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

6 Responses

  1. Julio Rocha disse:

    Professor, boa tarde! como ficaria para mais de um elemento?

    • Bom dia Julio, tudo joia?

      Você quer dizer, tipo um array multidimensional com várias linhas e colunas? Se sim, o ideal não é usar a ArrToJson, mas usar direto na JsonObject. Abaixo um exemplo, conforme a resposta que enviamos recentemente no nosso grupo do WhatsApp:
      […]
      //passo 1, crie o objeto JSON
      jResponse := JsonObject():New()

      //passo 2, declare um array dentro dele
      jResponse[‘objects’] := {}

      //passo 3, faça seu laço de repetição, e de o aAdd nesse array
      While ! QRY_TAB->(EoF())
      nAtual++

      oRegistro := JsonObject():New()
      oRegistro[‘cod’] := (cAliasWS)->B1_COD
      oRegistro[‘desc’] := (cAliasWS)->B1_DESC
      oRegistro[‘tipo’] := (cAliasWS)->B1_TIPO
      aAdd(jResponse[‘objects’], oRegistro)

      QRY_TAB->(DbSkip())
      EndDo

      //passo 4, transforme o objeto JSON em String
      cSuaString := jResponse:toJSON()
      […]

      Uma observação importante, é que o trecho acima foi gerado pelo Autumn Code Maker, onde você pode criar seus WebServices em poucos passos (PUT, POST, DELETE e GET), nesse link tem um exemplo em vídeo: https://terminaldeinformacao.com/2022/09/15/como-criar-uma-aplicacao-rest-em-advpl-em-poucos-passos/

      Um grande abraço.

  2. Rafael Strozi disse:

    Salvou meu dia!

  3. Júnior disse:

    Atilio, bom dia. Tudo bom?
    Como eu faço para fazer em múltiplas chaves no caso quando insiro {“SB9”, {…}} não consigo transformar em JSON.
    aArray := { {“SB4”, “S”}, {“SB1”, “S”}, {“SB0”, “S”}, {“SB2”, “S”}, {“SB9”, { {“03”, “N”}, {“15”, “N”}, {“21”, “N”}, {“24”, “N”}, {“30”, “N”}, {“36”, “N”} }} }

    • Bom dia Júnior, tudo joia?

      Com arrays multidimensionais, acho que a melhor alternativa seria já fazer nativo em JsonObject, por exemplo:

      Local jDados    := JsonObject():New()
      Local jSB9      := JsonObject():New()
          
      //Define as tabelas
      jDados["SB4"] :=  "S"
      jDados["SB1"] :=  "S"
      jDados["SB0"] :=  "S"
      jDados["SB2"] :=  "S"
      jDados["SB9"] :=  {}
      
      //Adiciona um armazém da sb9
      jSB9 := JsonObject():New()
      jSB9["01"] := "N"
      aAdd(jDados["SB9"], jSB9)
      
      //Adiciona outro armazém da sb9
      jSB9 := JsonObject():New()
      jSB9["02"] := "N"
      aAdd(jDados["SB9"], jSB9)
      
      //Adiciona um terceiro armazém da sb9
      jSB9 := JsonObject():New()
      jSB9["03"] := "N"
      aAdd(jDados["SB9"], jSB9)
      
      //Pega a string e exibe
      cString := jDados:ToJson()
      ShowLog(cString)
      

      Tenha um ótimo e abençoado fim de semana.

      Um forte abraço.

Deixe uma resposta

Terminal de Informação