我正在尝试使用 ROBLOX 的 API 来创建
;rs
命令,但进展不太顺利。
使用请求承诺我尝试搜索,它给我带来了这个错误:
SyntaxError: Unexpected token o in JSON at position 1
我之前已经回顾过这里的问题并回答了一些。如果这有帮助,我将使用 discord.js-commando 作为我的命令处理程序。
这是错误来自的部分:
let editMsg = await msgObject.reply(
":triumph: Finding ROBLOX Account, give me a second!"
);
let rs = await request({
uri: `https://users.roblox.com/v1/users/search?keyword=${idk}&limit=10`,
simple: false,
json: true
});
if (rs.userFacingMessage == "Something went wrong"){
if(rs.code == 5){
editMsg.edit("Sorry 😣, We couldn't process your search! The username you provided has been filtered!");
}
if(rs.code == 6){
editMsg.edit("Sorry 😣, We couldn't process your search! The username you provided is too short!");
}
}else {
let user = JSON.parse(rs)
msgObject.reply(user)
}
如果您需要查看整个 run()
方法,请点击
PasteBin 链接。
request-promise
带有选项 json: true
会自动解析响应中的 JSON 字符串。这意味着你的变量rs
已经是一个对象,而不是一个JSON字符串。
JSON.parse()
方法解析 JSON 字符串,因此当您尝试解析对象时,Node.js 首先将其转换为字符串 ([object Object]
)。第一个字符是 [
,这是有效的 JSON,但第二个字符(字母 o
)不是,因此您会收到 SyntaxError: Unexpected token o in JSON at position 1
。
尝试一下下面的方法:
const rs = {
previousPageCursor: null
}
try {
console.log(JSON.parse(rs))
} catch (error) {
console.log(error.message)
}
https://users.roblox.com/v1/users/search?keyword=${idk}&limit=10
处的API端点返回一个对象,因此您不能简单地在回复中按原样发送它。您可以使用 JSON.stringify()
从该对象创建字符串,或者您可以从 rs.data
获取用户数组。
如果您想返回单个用户,您可以从该数组中获取第一项 (
rs.data[0]
),或使用 find()
方法查找与您的关键字匹配的项目:
} else {
const user = rs.data[0]
msgObject.reply(`\`\`\`${JSON.stringify(user, null, 2)}\`\`\``)
}
} else {
const user = rs.data.find((u) => u.name === idk)
msgObject.reply(`\`\`\`${JSON.stringify(user, null, 2)}\`\`\``)
}
PS:下次当你不想粗鲁时,请不要写“不想粗鲁,但我想要一个答案[...]”
const rs = {
previousPageCursor: null
}
try {
console.log(JSON.parse(rs))
} catch (error) {
console.log(error.message)
}
const rs = {
previousPageCursor: null
}
try {
console.log(JSON.parse(rs))
} catch (error) {
console.log(error.message)
}