json 获取包含变量的数据

ylamdve6  于 2023-11-20  发布在  其他
关注(0)|答案(1)|浏览(100)

我的目标是通过Mojang API从Minecraft用户名获取uuid,然后通过Hypixel Skyblock API运行它。我的问题是我不能在JSON.stringify中使用变量${jsonsbid.id}。我对编码很陌生,似乎无法让它工作。
我使用Discord.js API将JSON结果作为消息发送出去。

import { key } from './config.json';

client.on('message', message => {
  const prefix = '!skyblock ';
  const skyblock = message.content.slice(prefix.length);
  const fetch = require('node-fetch');
  if (!message.content.startsWith(prefix) || message.author.bot) return; {
    try {
      fetch(`https://api.mojang.com/users/profiles/minecraft/${skyblock}`)
        .then(response => response.json())
        .then(jsonsbid => fetch(`https://api.hypixel.net/Skyblock/profiles?uuid=${jsonsbid.id}&key=${key}`))
        .then(responsesb => responsesb.json())
        .then(jsonsb => message.channel.send(`Coins: ${JSON.stringify(jsonsb.profiles[0].members.${jsonsbid.id}.coins_purse)}`)) //this is the line i need to get working
    } catch (err) {
      message.channel.send('A error occured')
    }
  };

字符串
我希望你能帮助我,这样我就可以学习更多关于编码和JS的知识。

pwuypxnk

pwuypxnk1#

您可以在bot中创建一个名为jsonsbidCache的缓存,它通过键skyblock存储jsonsbid JSON结果。然后您可以在最后的.then调用中访问它。
如果你只需要引用jsonsbid.id,那么你可以修改它来只缓存id值。

import { key } from './config.json';

const mojangApiUrl = 'https://api.mojang.com';
const skyblockApiUrl = 'https://api.hypixel.net/Skyblock';

const displayCoins = (member) => {
  return `Coins: ${JSON.stringify(member.coins_purse)}`;
};

const jsonsbidCache = new Map(); // Cache

client.on('message', message => {
  const prefix = '!skyblock ';
  const skyblock = message.content.slice(prefix.length);
  const fetch = require('node-fetch');
  
  if (!message.content.startsWith(prefix) || message.author.bot) {
    return;
  }
  
  try {
    fetch(`${mojangApiUrl}/users/profiles/minecraft/${skyblock}`)
      .then(response => response.json())
      .then(jsonsbid => {
        jsonsbidCache.set(skyblock, jsonsbid); // Cache it
        return fetch(`${skyblockApiUrl}/profiles?uuid=${jsonsbid.id}&key=${key}`)
      })
      .then(responsesb => responsesb.json())
      .then(jsonsb => {
        const memberId = jsonsbidCache.get(skyblock).id;
        const member = jsonsb.profiles[0].members[memberId];
        message.channel.send(displayCoins(member))
      })
  } catch (err) {
    message.channel.send('A error occured');
  }
}

字符串

相关问题