繁体   English   中英

检查 JSON 中的变量

Checking for a variable in a JSON

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

client.on("message", message => {
    if (!message.content.startsWith(prefix) || message.author.bot) return;

    const args = message.content.slice(prefix.length).split(/ +/);
    const command = args.shift().toLowerCase();

    if (command === `osu`) {

        if (!args.length) {
            const warn2 = new Discord.MessageEmbed()
                .setTitle(`Eek!`)
                .setDescription(`Please type a username to check!`)
                .setColor('#ffb9f4')
            message.channel.send(warn2);

        } else {
            const userosu = new Discord.MessageEmbed()
            got(`https://osu.ppy.sh/api/get_user?k=API_KEY&u=${args}`).then(response => {
                var response = JSON.parse(response.body)
                console.log(response)

                    if (response.body) {
                        message.channel.send('Invalid User!')
                        return;
                    } else {
                        
                        
                        var num = response[0].accuracy;
                        var n = toFixed(num, 2);

                        var num2 = response[0].level;
                        var n2 = toFixed(num2, 0);

                        var num3 = response[0].pp_raw;
                        var n3 = toFixed(num3, 2);
        

                        userosu.setAuthor(`User info for player ${response[0].username}`, `http://s.ppy.sh/a/${response[0].user_id}`, `https://osu.ppy.sh/u/${response[0].user_id}`)
                        userosu.setDescription(`**» Rank:** #${response[0].pp_rank} (${response[0].country}#${response[0].pp_country_rank}) \n**» Total PP:** ${n3} \n**» Accuracy:** ${n}% \n**» Level:** ${n2} \n**» Play count:** ${response[0].playcount}`)


                        message.channel.send(userosu)
                    }
            });
        }
    }
});

我目前关注的部分是

if (!response.body) {
             message.channel.send('Invalid User!')
                        return;
                    } else {


                        var num = response[0].accuracy;
                        var n = toFixed(num, 2);

                        var num2 = response[0].level;
                        var n2 = toFixed(num2, 0);

                        var num3 = response[0].pp_raw;
                        var n3 = toFixed(num3, 2);


                        userosu.setAuthor(`User info for player ${response[0].username}`, `http://s.ppy.sh/a/${response[0].user_id}`, `https://osu.ppy.sh/u/${response[0].user_id}`)
                        userosu.setDescription(`**» Rank:** #${response[0].pp_rank} (${response[0].country}#${response[0].pp_country_rank}) \n**» Total PP:** ${n3} \n**» Accuracy:** ${n}% \n**» Level:** ${n2} \n**» Play count:** ${response[0].playcount}`)


                        message.channel.send(userosu)
                    }
            });

使用 osu! API: https://github.com/ppy/osu-api/wiki ,如果无效的用户名输入到机器人中,我会尝试返回。 目前,使用正确的用户工作正常,但输入无效的用户名会带来此错误:( (node:42596) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'accuracy' of undefined

var num = response[0].accuracy;
var n = toFixed(num, 2);

我试图了解我做错了什么,因为我在这种事情上不是很有经验。 作为参考,输入一个好的用户名会带回来

[
  {
    user_id: '2',
    username: 'peppy',
    join_date: '2007-08-28 03:09:12',
    count300: '657863',
    count100: '118557',
    count50: '25576',
    playcount: '7356',
    ranked_score: '427516167',
    total_score: '1903116877',
    pp_rank: '497537',
    level: '66.0953',
    pp_raw: '829.834',
    accuracy: '97.14646911621094',
    count_rank_ss: '15',
    count_rank_ssh: '0',
    count_rank_s: '70',
    count_rank_sh: '0',
    count_rank_a: '115',
    country: 'AU',
    total_seconds_played: '721608',
    pp_country_rank: '11453',
    events: []
  }
]

输入错误的用户名时 put return

[]
1 个回复

您有几个选择:

1. 您可以先检查 response 是否为空数组,然后再尝试从中获取accuracy值:

if (!Array.isArray(response) || response.length === 0) {
    // error handling
} else {
    var num = response[0].accuracy;
    var n = toFixed(num, 2);
    // ...etc
}

2. 您可以使用可选的链接运算符首先将项目拉出,然后使用空合并运算符进行回退:

var num = response?.[0]?.accuracy ?? 0;
var n = toFixed(num, 2); // will be toFixed(0, 2) if response is empty

3. 您可以在try...catch包装快乐路径(其中存在响应)的整个操作,并将错误处理放在catch

try {
    var num = response?.[0]?.accuracy ?? 0;
    var n = toFixed(num, 2); // will be toFixed(0, 2) if response is empty
    // etc...
} catch (error) {
    // handle error
    console.log('something went wrong:', error);
}
4 快速检查 json 对象中是否存在变量/常量

所以我正在做一个个人项目,在我的苹果手表上分析来自 json 的数据,我坚持序列化 json。 在 json 的某些部分,存在一些键,而在其他部分缺少键。 我已经创建了一个结构(如下)来正确组织信息,但我希望能够检查它们是否都在那里,或者如果缺少默认值,则添加一个具有默认值的键。 如何检查存在的 ...

6 检查json字符串中是否存在变量

我有一个问题,我无法找到自己所以任何帮助赞赏。 我有一个动态购物车,里面装满了一些JSON数据。 在购物车中,运费也来自相同的json数据。 当方法可用时,脚本本身可以工作。 当该国家/地区的送货方式不可用时,脚本应该说“不可用”或类似的东西。 相反,它返回一个未定义的错误,导致购 ...

7 Ruby:检查JSON和命名变量

我真的是在Ruby中使用JSON的新手,并且很难弄清楚为什么我正在运行的脚本会生成空白行。 假设我正在解析一个文件,该文件并不总是存在一个元素。 我想检查该元素是否存在,并以特定方式取决于结果名称变量。 这是我一直在尝试的 这不会产生错误,而只是产生空白行。 我确定我在做一些明显 ...

2014-05-08 13:38:26 1 34   ruby/ json
10 解码JSON后如何检查变量是否存在?

我有这个 JSON 字符串。 这个字符串是动态生成的。 它可能有更多或更少。 我使用JSON 解码在 PHP 中处理它。 我如何检查变量 user_title 是否存在于字符串中? 如果存在,我应该获取该值,但如果不存在,则表示$user_title = NULL 。 ...

2021-01-27 08:09:21 1 47   php/ json
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM