Skip to main content

Como retirar um array? (Json.parse)


Olá!
Estou tentando exercitar os conhecimentos adquiridos no Bootcamp POA. (Aliás, ótimo evento)
Pois bem, meu objetivo é criar um bot de consulta de previsão do tempo. Similar ao exemplo do “Darksky” porém usando a API do clima tempo.

http://apiadvisor.climatempo.com.br/api/v1/locale/city?name={{cidade}}&token=XXXXXXXXXXXXX
Atualmente necessito pesquisar por uma string “name” que me retorna o seguinte:

[
    {
        "id": 5575,
        "name": "Canoas",
        "state": "RS",
        "country": "BR  "
    }
]

O que eu necessito desta consulta é apenas o ID.
Então tentei: {{response@id}} mas ele me retorna vazio quando faço desta maneira.

Pesquisando aqui no fórum entendi que é necessário retirar o array afim do builder pode consumir esta informação.
Este script é realizando utilizando um JSON.parse() e um JSON.stringify()?

Já sei como inserir o script, porém não sou programador, logo o básico de javascript pra mim é avançado. hehe
Estava tentando seguir esta linha, mas não tive sucesso.

function run(response) {
var idcidade = JSON.parse(response);
return idcidade
}

Existe algum modelo desta conversão que poderiam compartilhar para ajudar neste meu caso?
Conseguir somente o ID da cidade.

Obrigado!!

O conteúdo deste tópico foi útil para você?

11 comentários

Consegui assim:


function run(response) {

var idcidade = JSON.parse(response)[0].id;

return idcidade

}


Valeu!


@Luis_Augusto_Vanzin


Que bom que funcionou…


Da forma abaixo, acredito que fica mais fácil de entender o código.


function run(response) {

response = JSON.parse(response);

return response.id;

}


Dessa forma, você faz o parse do JSON para objetos Javascript.Como você já definiu a variável response no escopo da função, não é necessário declarar novamente a variável. Com isso, você terá uma estrutura de objetos e pode acessar a propriedade response.id. Caso quisesse o nome, ficaria response.name e assim por diante.


Ricardo_Anklan
  • Inspiring
  • 9 comentários
  • 25 de outubro de 2018

Fala Leonardo, uma duvida , caso queira converter todas as variáveis de uma só vez, ou um arquivo json inteiro, qual seria o jeito?


@Ricardo_Anklan, a função JSON.parse(parâmetro) já faz isso pra você. Basta você passar o retorno da sua API como parâmetro da função JSON.parse() e ele já retornará todas as chaves e valores pra você manipular no seu chatbot. Ele já converte tudo de uma vez. Aí depende de você quais chaves e valores você quer usar. Não é uma obrigação você usar todas 😃


  • Inspiring
  • 60 comentários
  • 1 de novembro de 2018

Só fique atento para um bug do PARSE que acontece quando o JSON vem com aspas duplas " dentro de um campo, tipo:


{

    "campo":"Valor com aspas " dentro do conteúdo"

}


Vai ter que limpar o conteúdo antes de fazer o parse.

Pra isso, faca um string.replace

Peguei isso na API do Google Custom Search que trazia " quando tinha menção a unidade de medida Polegadas no conteúdo.


@Jhoni_Desb, não sabia disso. Achei que o parse cuidava se caso viesse aspas duplas no retorno da informação. Obrigado pela dica 😃


  • Inspiring
  • 60 comentários
  • 1 de novembro de 2018

Então, eu fiquei de cara com isso, até por que faria mais sentido o PARSE considerar o valor do campo até a última aspas.

Ou ser mais inteligente e considerar tudo o que tem depois dos : até a vírgula, se houver.

Mas não, ele começa a ler o conteúdo a partir da primeira e ao encontrar a próxima aspas, ele termina a leitura do campo e parte para o próximo. Aí ta feita a cagada.

Cara, eu não manjo muito de JavaScript, não sei se existe outra solução, mas eu troquei os caracteres " por Pol.


@Jhoni_Desb, se quiser, me mostra como vem o seu JSON pra ver se existe uma solução mais viável. Já tenho uma certa experiência com JS. É bom também pra saber a lidar com esse tipo de situação. O que ele poderia fazer é entender que se houvesse uma aspas dupla dentro de outra, ele transformaria a outra em aspas simples, já que é possível colocar aspas simples dentro de duplas e vice-versa.


  • Inspiring
  • 60 comentários
  • 1 de novembro de 2018

Leonardo, eu acho que não tem como mexer na formatação do JSON do Google.

Olha um exemplo do resultado:


{

 "kind": "customsearch#search",

 "url": {

  "type": "application/json",

  "template": "https://www.googleapis.com/customsearch/v1?q={searchTerms}&num={count?}&start={startIndex?}&lr={language?}&safe={safe?}&cx={cx?}&sort={sort?}&filter={filter?}&gl={gl?}&cr={cr?}&googlehost={googleHost?}&c2coff={disableCnTwTranslation?}&hq={hq?}&hl={hl?}&siteSearch={siteSearch?}&siteSearchFilter={siteSearchFilter?}&exactTerms={exactTerms?}&excludeTerms={excludeTerms?}&linkSite={linkSite?}&orTerms={orTerms?}&relatedSite={relatedSite?}&dateRestrict={dateRestrict?}&lowRange={lowRange?}&highRange={highRange?}&searchType={searchType}&fileType={fileType?}&rights={rights?}&imgSize={imgSize?}&imgType={imgType?}&imgColorType={imgColorType?}&imgDominantColor={imgDominantColor?}&alt=json"

 },

 "queries": {

  "request": [

   {

    "title": "Google Custom Search - faca de churrasco",

    "totalResults": "84200000",

    "searchTerms": "faca de churrasco",

    "count": 10,

    "startIndex": 1,

    "inputEncoding": "utf8",

    "outputEncoding": "utf8",

    "safe": "off",

    "cx": "010049665617185726535:dpkiefl_kzu",

    "searchType": "image"

   }

  ],

  "nextPage": [

   {

    "title": "Google Custom Search - faca de churrasco",

    "totalResults": "84200000",

    "searchTerms": "faca de churrasco",

    "count": 10,

    "startIndex": 11,

    "inputEncoding": "utf8",

    "outputEncoding": "utf8",

    "safe": "off",

    "cx": "010049665617185726535:dpkiefl_kzu",

    "searchType": "image"

   }

  ]

 },

 "context": {

  "title": "Google"

 },

 "searchInformation": {

  "searchTime": 0.557068,

  "formattedSearchTime": "0,56",

  "totalResults": "84200000",

  "formattedTotalResults": "84.200.000"

 },

 "items": [

  {

   "kind": "customsearch#result",

   "title": "Faca para Churrasco Zakharov Picanheira Plus 10" com Cabo de ...",

   "htmlTitle": "\u003cb\u003eFaca\u003c/b\u003e para \u003cb\u003eChurrasco\u003c/b\u003e Zakharov Picanheira Plus 10" com Cabo de ...",

   "link": "https://w1.ezcdn.com.br/zakharov/fotos/zoom/457fz1/faca-churrasco-e-cozinha-cabo-de-madeira-zakharov-picanheira-plus-10.jpg",

   "displayLink": "www.zakharov.com.br",

   "snippet": "Faca para Churrasco Zakharov Picanheira Plus 10" com Cabo de ...",

   "htmlSnippet": "\u003cb\u003eFaca\u003c/b\u003e para \u003cb\u003eChurrasco\u003c/b\u003e Zakharov Picanheira Plus 10" com Cabo de ...",

   "mime": "image/jpeg",

   "image": {

    "contextLink": "https://www.zakharov.com.br/faca-churrasco-e-cozinha-cabo-de-madeira-zakharov-picanheira-plus-10-p457/",

    "height": 768,

    "width": 1024,

    "byteSize": 79558,

    "thumbnailLink": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSqLRyrozkNERwu86MqHw5L3QMvQpEKPeUTG82P84vNcA1BMMAr4uogiErE",

    "thumbnailHeight": 113,

    "thumbnailWidth": 150

   }

  },

...


Perceba o trecho com o conteúdo "title": "Faca para Churrasco Zakharov Picanheira Plus 10" com Cabo de ...",

Isso faz o PARSE bugar todo e não consigo nenhum retorno útil.


Jhoni, essa “” deveria escapar as quotes ("), mas por algum motivo não está fazendo isso. Vi algumas pessoas usando o replace method da classe String como você fez. Mas é curioso não estar escapando…


igor_junio_dos_santo

Pessoal apenas para acrescentar eu recupero um valor bem parecido com o seu, @Luis_Augusto_Vanzin e eu trato assim:



function run(inputVariable1, inputVariable2) {



function splitMulti(str, tokens) {

    var tempChar = tokens[0];

    for (var i = 1; i < tokens.length; i++) {

        str = str.split(tokens[i]).join(tempChar);

    }

    str = str.split(tempChar);

    return str;

}



var text = '{{respostaGetGoogleSheets@values}}'

var textNew = []

textNew = splitMulti(text, ['[["', '"],["', '"]]'])



var textPes = inputVariable1

var Existe = false

for (var i = 0; i < textNew.length; i++) {



    if (textPes == textNew[i]) {

        Existe = true

    }

}

return Existe

}



Mas neste caso eu preciso validar se o usuário já existe no meu bd salvo no Google Sheets.


Comente


Cookie Policy

We use cookies to enhance and personalize your experience. If you accept you agree to our full cookie policy. Learn more about our cookies.

 
Definições de cookies