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.
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 😃
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 😃
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.
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…
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.