我正在尝试从Node.js中的“噩梦”中获取一个json,然后使用JSON.parse(),但是我收到以下错误:
(node:9748)UnhandledPromiseRejectionWarning:未处理的promise promise(拒绝ID:1):SyntaxError:位于18509的JSON中的意外的令牌<
我的代码:
var nightmare = Nightmare()
.goto('URL')
.wait(10000) // Need wait some time
.evaluate(() => {
return document.body.innerText;
})
.end()
.then((body) => {
var data;
try {
data = JSON.parse(body);
} catch(e) {
console.log(e);
}
callback(null, data);
});
答案 0 :(得分:0)
您可以在使用JSON.parse函数时检查JSON是否有效。
function validJSON(str) {
try {
// try to parse the JSON
JSON.parse(str);
} catch (e) {
// if not a json
return false;
}
// if it's valid json
return true;
}
它将检查字符串是否有效json。现在,您可以将它与梦魇一起使用。
const nightmare = Nightmare()
.goto("URL")
.wait(10000) // Need wait some time
.evaluate(() => {
return document.body.innerText;
})
.end()
.then(body => {
// if it's a valid json, send it,
// otherwise send it as a body object
const data = validJSON(body) ? body : { body };
callback(null, data);
});
现在,错误显示是因为您说 catch(e)和 console.log(e)错误。因此,它只是服从你的命令。
由于表情符号本身不是有效的json,你必须从中创建一个json,或者如果它是json 字符串则解析它。
有效的json对象可能如下所示,
{emoji: "☻"}
你看到它是如何被引用的?