gpt4 book ai didi

json - NodeJS 获取请求。 JSON.解析: unexpected token

转载 作者:太空宇宙 更新时间:2023-11-03 23:33:41 25 4
gpt4 key购买 nike

我正在 NodeJS 中编写一个函数,它可以访问 URL 并检索其 json。但我在 JSON.parse 中遇到错误:意外的标记。

在 json 验证器中,当我从浏览器复制并粘贴到文本字段时,字符串通过了测试,但是当我粘贴解析器的 Url 以获取 json 时,它显示一条无效消息。

我猜这与响应的编码有关,但我无法弄清楚它是什么。这里是我的函数和示例 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);
});
}

你能帮我一下吗?

预先感谢您的帮助。

最佳答案

将响应连接为字符串可能会出现编码问题,例如如果每个 block 的缓冲区都转换为在开头或结尾具有部分 UTF-8 编码的字符串。因此我建议首先连接作为缓冲区:

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

当然,它可能有助于代表您显式地将缓冲区转换为字符串,而不是依赖 JSON.parse() 隐式执行此操作。如果使用不寻常的编码,这可能是必不可少的。

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。

关于json - NodeJS 获取请求。 JSON.解析: unexpected token,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35227262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com