NodeJS获取请求。 JSON.parse:意外的令牌

我在NodeJS中写入一个函数,命中Url并获取它的json。 但是我在JSON.parse中发现一个错误:意外的令牌。

在jsonvalidation器中,当我从浏览器复制并粘贴到文本字段时,string正在通过testing,但是当我粘贴parsing器的Url以获取json时,它会显示一条无效的消息。

我想这是与响应编码的东西,但我不能弄清楚它是什么。 这里如果我的function与一个例子Url。

function getJsonFromUrl(url, callback) { url = 'http://steamcommunity.com/id/coveirao/inventory/json/730/2/'; http.get( url , function (res) { // explicitly treat incoming data as utf8 (avoids issues with multi-byte chars) res.setEncoding('utf8'); // incrementally capture the incoming response body var body = ''; res.on('data', function (d) { body += d; }); // do whatever we want with the response once it's done res.on('end', function () { console.log(body.stringfy()); try { var parsed = JSON.parse(body); } catch (err) { console.error('Unable to parse response as JSON', err); return callback(err, null); } // pass the relevant data back to the callback console.log(parsed); callback(null, parsed); }); }).on('error', function (err) { // handle errors with the request itself console.error('Error with the request:', err.message); callback(err, null); }); } 

你能帮我吗?

在此先感谢您的帮助。

将string作为string进行连接可能会导致编码问题,例如,如果每个字符块的缓冲区在开始或结束时都被转换为部分UTF-8编码的string。 因此,我build议先连接成缓冲区:

 var body = new Buffer( 0 ); res.on('data', function (d) { body = Buffer.concat( [ body, d ] ); }); 

当然这可能有助于明确地将缓冲区转换为string,而不是依靠JSON.parse()隐式执行。 这在使用不寻常编码的情况下可能是必不可less的。

 res.on('end', function () { try { var parsed = JSON.parse(body.toString("utf8")); } catch (err) { console.error('Unable to parse response as JSON', err); return callback(err, null); } ... 

除此之外,由给定的URL提供的内容似乎是相当有效的JSON。