“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.stringifying première, toStringing, la conversion à un new Buffer et puis stringifying, .triming espace blanc, et replaceing 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. curling 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.

Le 1fef caractère de l'écriture rawData de fichier, c'est de l'utf8 code pour un backtick characer (`) ce qui me fait penser JSON.parse() est l'étouffement.
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. curling 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