“Unexpected token en JSON à la position 0” à l'aide de JSON.analyser dans le Noeud avec JSON valide
J'ai déchiré mes cheveux au cours de cette seule depuis des heures maintenant.
J'ai un simple Nœud de serveur que de faire un appel à une API externe pour obtenir une (énorme, comme 4+ MO) peu de JSON. Je suis en utilisant comme standard d'une demande que vous pouvez obtenir, pris directement à partir du Nœud docs:
const muniURL = `http://api.511.org/transit/vehiclemonitoring?api_key=${API_KEYS.API_KEY_511}&format=json&agency=sf-muni`;
http.get(muniURL, (res) => {
const statusCode = res.statusCode;
const contentType = res.headers['content-type'];
console.log('Status Code:', statusCode);
console.log('Content Type:', contentType);
let error;
if (statusCode !== 200) {
error = new Error(`Request Failed.\n` +
`Status Code: ${statusCode}`);
} else if (!/^application\/json/.test(contentType)) {
error = new Error(`Invalid content-type.\n` +
`Expected application/json but received ${contentType}`);
}
if (error) {
console.log(`Request error: ${error.message}`);
//consume response data to free up memory
res.resume();
return;
}
res.setEncoding('utf8');
let rawData = '';
res.on('data', (chunk) => rawData += chunk);
res.on('end', () => {
try {
const parsedData = JSON.parse(rawData);
console.log('parsedData:', parsedData);
} catch (e) {
console.log(`Caught error: ${e.message}`);
}
});
}).on('error', (e) => {
console.log(`Got error: ${e.message}`);
});
...et à chaque fois, il frappe le catch
déclaration auprès de:
Caught error: Unexpected token in JSON at position 0
. (Remarque: les deux espaces entre 'token' et 'en'.)
J'ai vérifié le JSON retourné à partir de Chrome et Postman avec deux différentes basé sur le web JSON validateurs, et il revient comme valide. Lors de l'écriture de rawData
à un fichier ressemble à quelque chose comme une mémoire tampon(?)...
1fef bfbd 0800 0000 0000 0400 efbf bdef
bfbd efbf bd72 efbf bdc8 b62d efbf bd2b
0c3f 7547 1cef bfbd 00ef bfbd efbf bd0b
efbf bd5b 49ef bfbd 2def bfbd 6c6b efbf
bd5c 55ef bfbd efbf bd44 3fef bfbd 126c
71ef bfbd 021c 2029 6def bfbd 13ef bfbd
efbf bdef bfbd 437f 52ef bfbd 4227 48ef
bfbd efbf bd4d efbf bd31 13ef bfbd 09ef
bfbd 5d2f 7bef bfbd efbf bde5 aa81 745e
efbf bd65 efbf bd31 efbf bdef bfbd efbf
...
...Buffer.isBuffer
revient faux.
A ce jour, j'ai essayé JSON.stringify
ing première, toString
ing, la conversion à un new Buffer
et puis stringifying, .trim
ing espace blanc, et replace
ing toutes sortes de caractères d'échappement, en vain.
Ce qui me manque ici?
EDIT: j'ai réalisé que j'étais la validation JSON récupérée par le Chrome et le Facteur, qui, apparemment, sont en train de faire quelques pré-traitement de quelque sorte. curl
ing l'URL des rendements tout un tas de bordel ce n'est certainement pas du JSON. Reste encore la question de savoir quel type de données, ce désordre est en fait, et pourquoi je ne reçois pas JSON quand je suis spécialement de la demander.
Que faut-il dire si vous console.log(rawData); sur la ligne avant const parsedData = JSON.parse(rawData);
Exploitation forestière donne tout un tas de charabia qui n'est certainement pas JSON:
��ε�@+���@}<��ot�Xu���y��֙�%���"���٤��r�$�����ҙ��@2�+LDSX�ѥ~r���k�����fg�( ~J,�GS����T��$�'�����nc$XfI%1t!FO@)�>�ܪ��Z�Z��7q30�uV�衷�����ZrR3��4�>���*J�� ��<��͏����2o�&m�R�:�|p��>�[=��x}m��{���1�����E�������4�O�Q��+�rjZ�ȏ@��}��ź6ҪG�u��[�ڞ"�妕d|t��>�}+|z��>j\k�O�l��IY�d��Ӓ=0�vYTe]iޝ#SQb�9-l���6}U��[����?d���y&
je pense que j'ai été induit en erreur par certaines automatique de pré-traitement de Chrome/Facteur était en train de faire. curl
ing l'URL donne cette même non-JSON mess. Je ne sais pas quel type de données que je reçois, si.
OriginalL'auteur dangerismycat | 2016-12-03
Vous devez vous connecter pour publier un commentaire.
Il semble api.511.org est l'application de gzip pour tous les appels d'api qui offre valide api_key. C'est aussi le retour d'un invalide premier caractère de la réponse json.
Voici une solution de contournement:
Content d'avoir pu aider. Oh, et s'il vous plaît assurez-vous de revenir à l'aide de votre propre clé api. J'ai oublié de sortir la bande de mon test de la clé api avant de poster ma réponse.
Pas de soucis, j'ai juste adapté votre réponse et a continué à utiliser mon propre clé API. Merci encore!
J'aime TELLEMENT, j'ai été débogage pendant une heure
Merci beaucoup pour la solution. Dans mon cas, j'ai converti un fichier excel en fichier json, puis la lecture du fichier json par le biais d'un programme écrit pour nodejs.
OriginalL'auteur Rocky Sims