Visualizar informações dentro da array separadamente?

Como faço pra todos codfaturas, data_nacimento, descricao e valor_total separadamente em js?

{
  “CodigoPessoa”: 17839,
  Expecting property name
  “FaturasPendentes”: [
    {
      “codfatura”: 658397,
      “contas”: “Conta: 836397-Descri\u00e7\u00e3o: Ref.: 400MB129,
      99-Valor: 129.990000000000009”,
      “contratos”: “Contrato: 16639-Plano: 400MB129,
      99-Ades\u00e3o: 2021-04-26-Tipo: 1”,
      “data_vencimento”: “15/07/2021”,
      “descricao”: “Ref.: 400MB129,
      99”,
      “valor_total”: 129.99
    },
    {
      “codfatura”: 658398,
      “contas”: “Conta: 836398-Descri\u00e7\u00e3o: Ref.: 400MB129,
      99-Valor: 129.990000000000009”,
      “contratos”: “Contrato: 16639-Plano: 400MB129,
      99-Ades\u00e3o: 2021-04-26-Tipo: 1”,
      “data_vencimento”: “15/08/2021”,
      “descricao”: “Ref.: 400MB129,
      99”,
      “valor_total”: 129.99
    },
    {
      “codfatura”: 658399,
      “contas”: “Conta: 836399-Descri\u00e7\u00e3o: Ref.: 400MB129,
      99-Valor: 129.990000000000009”,
      “contratos”: “Contrato: 16639-Plano: 400MB129,
      99-Ades\u00e3o: 2021-04-26-Tipo: 1”,
      “data_vencimento”: “15/09/2021”,
      “descricao”: “Ref.: 400MB129,
      99”,
      “valor_total”: 129.99
    },
    {
      “codfatura”: 658400,
      “contas”: “Conta: 836400-Descri\u00e7\u00e3o: Ref.: 400MB129,
      99-Valor: 129.990000000000009”,
      “contratos”: “Contrato: 16639-Plano: 400MB129,
      99-Ades\u00e3o: 2021-04-26-Tipo: 1”,
      “data_vencimento”: “15/10/2021”,
      “descricao”: “Ref.: 400MB129,
      99”,
      “valor_total”: 129.99
    },
    {
      “codfatura”: 658401,
      “contas”: “Conta: 836401-Descri\u00e7\u00e3o: Ref.: 400MB129,
      99-Valor: 129.990000000000009”,
      “contratos”: “Contrato: 16639-Plano: 400MB129,
      99-Ades\u00e3o: 2021-04-26-Tipo: 1”,
      “data_vencimento”: “15/11/2021”,
      “descricao”: “Ref.: 400MB129,
      99”,
      “valor_total”: 129.99
    },
    {
      “codfatura”: 658402,
      “contas”: “Conta: 836402-Descri\u00e7\u00e3o: Ref.: 400MB129,
      99-Valor: 129.990000000000009”,
      “contratos”: “Contrato: 16639-Plano: 400MB129,
      99-Ades\u00e3o: 2021-04-26-Tipo: 1”,
      “data_vencimento”: “15/12/2021”,
      “descricao”: “Ref.: 400MB129,
      99”,
      “valor_total”: 129.99
    },
    {
      “codfatura”: 658403,
      “contas”: “Conta: 836403-Descri\u00e7\u00e3o: Ref.: 400MB129,
      99-Valor: 129.990000000000009”,
      “contratos”: “Contrato: 16639-Plano: 400MB129,
      99-Ades\u00e3o: 2021-04-26-Tipo: 1”,
      “data_vencimento”: “15/01/2022”,
      “descricao”: “Ref.: 400MB129,
      99”,
      “valor_total”: 129.99
    },
    {
      “codfatura”: 658404,
      “contas”: “Conta: 836404-Descri\u00e7\u00e3o: Ref.: 400MB129,
      99-Valor: 129.990000000000009”,
      “contratos”: “Contrato: 16639-Plano: 400MB129,
      99-Ades\u00e3o: 2021-04-26-Tipo: 1”,
      “data_vencimento”: “15/02/2022”,
      “descricao”: “Ref.: 400MB129,
      99”,
      “valor_total”: 129.99
    },
    {
      “codfatura”: 658405,
      “contas”: “Conta: 836405-Descri\u00e7\u00e3o: Ref.: 400MB129,
      99-Valor: 129.990000000000009”,
      “contratos”: “Contrato: 16639-Plano: 400MB129,
      99-Ades\u00e3o: 2021-04-26-Tipo: 1”,
      “data_vencimento”: “15/03/2022”,
      “descricao”: “Ref.: 400MB129,
      99”,
      “valor_total”: 129.99
    },
    {
      “codfatura”: 658406,
      “contas”: “Conta: 836406-Descri\u00e7\u00e3o: Ref.: 400MB129,
      99-Valor: 129.990000000000009”,
      “contratos”: “Contrato: 16639-Plano: 400MB129,
      99-Ades\u00e3o: 2021-04-26-Tipo: 1”,
      “data_vencimento”: “15/04/2022”,
      “descricao”: “Ref.: 400MB129,
      99”,
      “valor_total”: 129.99
    }
  ],
  “Nome”: “NATHAN APARECIDO”,
  “status”: “OK”
}

Alguém consegue apoiar neste caso? Estou com uma situação parecida, porém mesmo com o apoio do Suporte, até o momento não consegui tratar essas informações no Portal.

1 Curtida

consegui resolver depois de muita pesquisa na plataforma:

    function run(data) {
        const dados = JSON.parse(data);

        let menu = '';
        let lastday = '';

        menu = 'Por favor, Digite o numero correspondente a opção desejada:\n\n';
        dados.FaturasPendentes.forEach(h => {
            menu += `*${h.codfatura}* - ${h.data_vencimento} - ${h.valor_total}\n`;
        });
        return menu;
    }

E vc colocar na variável de retorno “menu”.
Mas agora estou querendo ordenar o menu com 1 2 3 4 5 6…

2 Curtidas

Cara teu script já me ajudou muito agora, mas meu conhecimento não é tão grande em Javascript. E pelo portal não conseguir ler o array, fica muito complicado a forma que eu vou tratar essas informações, já que todas vão estar numa mesma variável.

Caso consiga algum progresso, fico grato se puder compartilhar aqui também, nessa questão mesma de ordenação. Se eu conseguir qualquer progresso aviso aqui também!

1 Curtida

@Netwise_Internet para colocar uma numeração, você criar um contador e ir incrementando ele a cada interação do forEach, mais ou menos assim:

function run(data) {
        const dados = JSON.parse(data);

        let menu = '';
        let lastday = '';
        let count = 1;


        menu = 'Por favor, Digite o numero correspondente a opção desejada:\n\n';
        dados.FaturasPendentes.forEach(h => {
            menu += `${count}: *${h.codfatura}* - ${h.data_vencimento} - ${h.valor_total}\n`;
            count++;
        });
        return menu;
    }

Aí o retorno seria assim:

image

@Allan_Vieira posta o seu caso aí pra gente tentar te ajudar também :smartblip:

2 Curtidas

Boa tarde, Bruno. Tudo bem?

Então nessa situação, onde estamos tratando um retorno de um array, que utiliza os mesmos apontamentos, no exemplo do Netwise_Internet poderíamos ver a parte do “codfatura”.

Utilizando o script que ele apresentou, conseguimos tratar essas informações e até apresentá-las, conforme o teu exemplo também, porém eu queria saber, existe alguma forma de eu armazenar essas informações em variáveis diferentes? Porque no meu caso, imagino que o cliente escolha a opção 2, todas essas informações vão estar na variável “menu” então como vou conseguir acessar o id referente a opção 2? No caso o cliente terá que digitar este ID, para que eu consiga armazená-lo em alguma variável?

A minha situação é parecida, porém eu precisaria armazenar estes ID’s em variáveis separadas, porque vou precisar fazer outra requisição http posteriormente com este ID. E até o momento, eu só consegui encontrar a opção de concatenar todas as informações numa única variável e apresentá-la no meu fluxo.

1 Curtida

@Allan_Vieira, salvar em variáveis diferentes é possível, mas talvez exija um pouco mais de trabalho. O ideal aqui seria transformar todas as informações em um JSON, de forma que você consiga percorrê-lo sem ter que buscar pelo índice (pois isso não é possível no Blip).

Dá uma olhadinha neste post e veja se te ajuda (a ideia é parecida, principalmente nesta resposta minha):

1 Curtida

Cheguei a olhar, porém não consegui copiar aquele script com as informações que possuo atualmente.

Neste caso aqui:

Como eu trataria essas informações do ID e do title, em variáveis diferentes?

Tentei utilizar as informações deste Post que você encaminhou, porém desta maneira não consegui tratar da forma necessária, consegue me orientar?

No caso ele utiliza um item e um index, porém como eu não sei como essas informações chegam pra ele, eu fiquei na dúvida de como eu monto no meu script e também pelo meu pouco conhecimento em Javascript.

Desde já agradeço muito o apoio de vocês no fórum.

@Bruno Para complementar, no exemplo que vc passou para o Rodrigo, tem uma função dentro do forEach com (item, index), isso é apenas para criar dinamicamente o nome dos elementos e depois adicionar os elementos?

Ou isso tem alguma relação com o retorno do JSON que o Rodrigo estava fazendo? Pois nas evidencias e no print’s do Rodrigo, não encontrei nenhuma dessas duas variáveis, com os exemplos. Quando tentei utilizar aquele script de base para o meu teste, não consegui evoluir, sempre da algum erro. Tento mudar essas informações, mas não consigo evoluir.

/**
* All input variables needs to be passed as function param;
* Objects received as param needs to be parsed. Ex.: JSON.parse(inputVariable1);
* Objects returned needs to be stringfied. Ex.: JSON.stringify(inputVariable1);
**/
function run(retornoCSTAT) {
const dados = JSON.parse(retornoCSTAT);

            let mensagem = {};
            //
            var count=0;

            dados.forEach(function(item, index) {
                count++; //contador para auxiliar verificação no blip
                var id = "id" + index; //cria dinamicamente nome dos elementos
                var title = "title" + index; //cria dinamicamente nome dos elementos
                mensagem[id] = item.id; //adiciona os elementos
                mensagem[title] = item.title; //adiciona os elementos
            });
            
            return JSON.stringify(mensagem); //Return value will be saved as "Return value variable" field name
        }

Montei desta forma o script, porém sempre gera algum erro:

Imagino que devido a falta de conhecimento no Javascript, devo ter feito algum apontamento errado neste script acima. E no meu caso, eu vou precisar mesmo armazenar em variáveis diferentes o retorno da minha API.

@Allan_Vieira,

O seu padrão de estrutura JSON é o seguinte (removi dados e troquei outros, só pra fins de exemplo):

JSON antigo
{
	"results": [
  {
  	"id":"88899977",
    "type": "page", 
    "title": "Rejeição 233"
  },
  {
  	"id":"00112233",
    "type": "page", 
    "title": "Aceitação 233"
  },
  {
  	"id":"77556622",
    "type": "page", 
    "title": "Indefinido"
  },
  ]
}

Neste caso, em meios normais, para retornar um valor específico, poderíamos fazer

json.results[#].title, para retornar um atributo title específico, onde # é o índice. Por exemplo, se eu quisesse retornar o valor de title Indefinido, usando o exemplo acima, seria: json.results[2].title.

Não sei como é o seu conhecimento, mas veja que cada '.', indica um seletor ou um delimitador. Eu estou afirmando que eu quero acessar o objeto Results, depois o elemento de results, e deste terceiro elemento, quero o atributo title. É uma estrutura hierárquica mesmo.

No Blip, só conseguimos ir onde for direto, através dos '.'. Tudo que exiga um “vá para o Xº elemento”, não é possível. Por isso para o seu caso, eu fiz o código da seguinte maneira:

Código
function run (data){
   data = JSON.parse(data); //transforma a variável de String para um objeto JSON
   var count = 0;  // contador opcional

data.results.forEach(function(item, index) {
    count++; //contador para auxiliar verificaçao no blip
    var id= "id" + index; //cria dinamicamente nome dos elementos
    var title = "title" + index;
	data[id] = item.id; //adiciona os elementos
	data[title] = item.title;
})

data.qtd = count;
delete data['results']; //remove os dados antigos
return data; //retorna a nova estrutura
}

E o que ele faz é transformar este seu JSON em um JSON com menos hierarquia, onde seja possível acessar todos os elementos “descendo apenas um nível”. Ele fica da seguinte maneira, após passar pelo script:

Novo JSON
{
  id01: "88899977",
  id11: "00112233",
  id21: "77556622",
  title01: "Rejeição 233",
  title11: "Aceitação 233",
  title21: "Indefinido",
  qtd: 4,
}

Agora, no Blip, você consegue acessar quais valores quiser, de forma independente, como se fossem variáveis diferentes. Fazendo assim, ó:

{{json@title1}}json é o nome da variável que você colocar como o retorno da ação de script
{{json@id1}}

Observação importante:
Você ainda pode ter objetos dentro de um atributo, normalmente, desde que ele tenha sempre apenas “1 filho” e você consiga acessar diretamente, sem precisar especificar o índice. Veja o caso abaixo:

Json hierárquico
{
   "id0":"88899977",
   "id1":"00112233",
   "id2":"77556622",
   "title0":"Rejeição 233",
   "title1":"Aceitação 233",
   "title2",
   "caso0": {
      "motivo":"é sobre isso",
      "responsavel": "bruno"
    },
   "caso1": {
      "motivo":"e tá tudo bem",
      "responsavel": "thiago"
   },
}

Se eu quisesse, poderia ter acesso aos atributos motivo e responsavel, da mesma forma, usando:

{{json@caso1.motivo}}

Desculpe pelo textão, mas qualquer coisa, é só falar!

2 Curtidas

Rapaz eu que peço desculpas pelos meus textos de antes e por esse textão agora, mas tu me ajudou bastante, na verdade tenho que agradecer muito pelo fórum, desde sempre coleto muitas informações importantes aqui, e também sempre vejo a disponibilidade de vocês para nos orientar e nos apoiar nessas situações.

Te falar que eu cheguei perto do script que vc me passou, quase tinha conseguido o mesmo retorno que você, mas deu bom agora.

Aproveitando para finalizar, é possível eu montar algum script para trabalhar com um “Conteúdo Dinâmico”? Após o script acima, eu teria uma validação destes retornos, e depois eu apresentaria um menu com estas informações, utilizando o “Conteúdo dinâmico”. Ou você orientaria eu tentar tratar essas informações com outros processos? No caso, isso seria uma pesquisa numa base de conhecimento nossa, e disponibilizaríamos alguns retornos pro cliente escolher, e caso não seja, ele continuaria a busca com o nosso “menu”. E caso fosse a opção desejada, eu armazenaria essa escolha, para continuar o fluxo posteriormente.

E em relação ao BLiP, é possível eu tratar as informações recebidas abaixo?

No postman, libera essa opção do preview, eu acho que para exibir os campos, Problema, Solução, eu teria que tratar diretamente via script também? Ai só concatenando as informações para exibir da forma correta, certo?

De qualquer modo, muito obrigado pelo apoio de sempre no fórum por vocês da blip e também pelo próprio pessoal que utiliza os produtos da blip, sempre disponível para nos orientar e nos auxiliar. É um diferencial enorme termos esse fórum a nossa disposição.

Sim, é possível. Aí vai depender de qual tipo de conteúdo você quer formar. Dá uma olhada nas estruturas dos nossos conteúdos, acessando a nossa documentação. Aí seria criar um script para passar os dados do seu JSON para esse JSON do formato do conteúdo.

Sim, é possível. O único ponto é que o canais usam formatação de Markdown e não HTML, como está aí. Você fazer um script para remover essas tags e deixar apenas o texto corrido - ou formatá-lo como você quiser.

1 Curtida