J'ai la fonction d'extraction fetch() pour récupérer les détails des webinaires historiques de GotoWebinar en utilisant leur API. Elle retourne un corps JSON avec cette structure, un tableau d'objets:réponse fetch() tronquage des grands nombres
[{ "webinarKey": 5653814518315977731, "webinarID": "562189251", "sujet": "Webinar Sample", "organizerKey" : 100000000000331530 }, { "webinarKey": 9999814518315977731, "webinarID": "999989251", "sujet": "Webinar Sample", "organizerKey": 999900000000331530 }]
Mon code est implanté dans une action Zapier (node.js) et le bit important l Ooks comme ceci:
//Handle errors from fetch call
function handleFetchStatus(response){
console.log('Fetch Response Status: ' + response.status);
switch(response.status){
case 200: //Request executed properly
break;
default:
throw Error(response.status + ':' + JSON.stringify(response));
}
return response.json();
}
function handleFetchBody(oResponse){
if (oResponse) {
console.log('handleFetchBody: ' + JSON.stringify(oResponse));
}
callback(null, oResponse);
}
//Send POST request.
fetch(getFetchURL(), getFetchOptions())
.then(handleFetchStatus)
.then(handleFetchBody)
.catch(function(error) {
callback(error);
});
Le problème que j'ai est que la « webinarKey », un long numéro, est tronquée de « 5653814518315977731 » à « 5653814518315978000 ». Je crois que c'est la fonction json() qui ne gère pas les grands nombres.
Comment puis-je arrêter ceci?
Je crois que je dois transformer la webinarKey en chaîne avant d'utiliser json(), mais je ne suis pas sûr de la façon d'accéder à tous les éléments de l'objet. Est-ce possible même dans une réponse de recherche.
Je comprends que je ne peux pas stocker un nombre aussi grand et qu'il doit être converti en une chaîne. Mais l'appel API renvoie un corps de réponse avec un format sur lequel je n'ai aucun contrôle. Alors, comment puis-je accéder aux éléments du corps de la réponse, afin que je puisse les convertir en une chaîne avant de le passer à .json()? –
Si vous analysez la réponse sous forme de texte ('response.text()' au lieu de 'response.json()'), vous pouvez appeler 'text.replace (/ (" [^ "] *" \ s *: \ s *) (\ d {16,})/g, '$ 1 "$ 2"') 'pour remplacer toutes les chaînes de 16 chiffres ou plus par des chaînes.Vous pouvez ensuite passer ce texte dans' JSON.parse() '. – csander
Merci J'espérais ne pas faire l'analyse syntaxique mais cela semble être le seul moyen. –