[Resolvido] Preencher um menu com itens de um array do JSON


#1

Boa tarde a todos.

Estou construindo um chat bot teste a partir da interface do BLIP e estou com dificuldades em acessar conteúdo em arquivos JSON.
Já vi aqui no fórum instruções de como acessar um campo de um arquivo JSON que retornou de uma requisição HTTP, utilizando a sintaxe {{response@campo}}. OK, isso funcionou!
Já vi aqui no fórum que NÂO é possível acessar um sub campo de um arquivo JSON diretamente do BUILDER, tipo {{response@campo@campo}} ou mesmo {{response@campo[0].campo}}, mas que através da execução de script eu consigo fazer tal acesso dessa forma:

function run(response) {
var campo= JSON.parse(response)[0].campo;
return campo;
}
OK, isso funcionou!

Agora tenho um JSON com o seguinte formato:

{
“matricula”: 123456,
“matriculaSpecified”: false,
“estados”: [
{
“nome”: “ALAGOAS”,
“selecionado”: false,
“sigla”: “AL”
},
{
“nome”: “AMAZONAS”,
“selecionado”: false,
“sigla”: “AM”
},
{
“nome”: “BAHIA”,
“selecionado”: false,
“sigla”: “BA”
},
{
“nome”: “TOCANTINS”,
“selecionado”: false,
“sigla”: “TO”
}
]
}
Eu consigo acessar os estados do array executando script, mas o retorno do script me devolve apenas um item do array, que seria um conjunto (“nome”: “ALAGOAS”, “selecionado”: false, “sigla”: “AL”) por exemplo, aí que vem o problema.
Não tem como prever quantos estados serão retornados, sendo assim fica inviável implementar um script para retornar cada estado.
Tentei trocar os colchetes por parênteses, conforme instruções em outro post do fórum e acabo esbarrando no problema de que os campos dentro de cada item do array são homônimos, então não consigo uma forma de acessar os campos homônimos do próximo grupo.
Pretendo preencher um menu com todos os estados retornados pela requisição HTML e é claro de forma automatizada.
Alguma ideia do grupo.

Desde já agradeço.


#2

Olá, @Marcelo_Collares.

Uma solução é criar uma API intermediária - que faria a requisição HTTP e retornaria o conteudo da forma que vc quer exibir (algum dos ‘content types’ do Blip).
Outra seria tentar criar o conteudo dentro do script, e salvar como JSON em uma variável.

Nos 2 casos vc terá uma variável com o JSON de um tipo de conteudo Blip, que poderá usar como um ‘conteudo dinamico’.


[Resolvido] Utilizar array de objetos no Builder
[Resolvido] Utilizando REST + Array
#3

@Marcelo_Collares acredito ser mais fácil e simples você usar um Script de Parse do JSON após a requisição HTTP.
Aí tu monta uma String JSON do jeito que quiser.

Outra maneira é simplesmente fazer o PARSE e jogar numa variável:

function run(resposta_requisicao_http) {
    var json = JSON.parse(resposta_requisicao_http);
    var valor_campo = json.dados.array[0].nome_do_campo
    return valor_campo;
}

#4

Bom dia, obrigado pela resposta.
É tranquilo fazer o PARSE pelo script, acontece que a variável de retorno contem apenas 1 item do array, e cada requisição me retorna uma array de tamanho diferente, então eu teria que fazer um script para cada item do array, mas como o tamanho dele é dinâmico fica proibitivo.


#6

Faz um FOR sob o .lenght do Array


#7

Obrigado pelas dicas de todos.
O problema foi resolvido. Montei a variável pelo script já no formato para leitura do conteúdo dinâmico, daí o menu é criado automaticamente.


#8

Funcionou montando o conteúdo dentro do script e retornando ela para usar no conteúdo dinâmico.
Obrigado pela dica.


#9

Pode colocar o modelo de script que utilizou?


#10

@Marcelo_Collares você pode enviar o exemplo dessa solução que vc usou? Obrigado!