当前位置: 首页 > 知识库问答 >
问题:

节点提取json问题

邢雨华
2023-03-14

我目前正在为我的不和谐机器人做一个计算器功能。我做了一个获取steam市场项目价格的命令,然后根据公式进行计算:([price]-[price*0.15])*案例数量,其中0.15是市场费用。问题就出在这里了。程序将json.lowest_price看作一个单词,而不是数字(我认为)。结果,bot发送消息“nan”。我不知道如何使我的代码正确地将json thingy视为一个数字。请帮助<3。这是我的代码:

const Discord = require('discord.js');
const fetch = require('node-fetch');
const client = new Discord.Client();

client.login('[TOKEN]');
 

client.on('ready', () => {
  console.log(`Logged in as TEST`);
});


//////////////////////////////////

const prefix = "!";
client.on('message', message =>{
  if (!message.content.startsWith(prefix) || message.author.bot) return;
  const args = message.content.slice(prefix.length).trim().split(/ +/);
  const command = args.shift().toLowerCase();

if (command === 'calculate') {
  if (!args.length){
    return message.channel.send(`Invalid argument`);
  } else if (args[0] === 'breakout'){
    fetch(
    'https://steamcommunity.com/market/priceoverview/?appid=730&market_hash_name=Operation%20Breakout%20Weapon%20Case&currency=6',
  )
    .then((res) => res.json())
    .then((json) =>
      message.channel.send(
        `From ${args[1]] breakout cases you will get ${((json.lowest_price)-((json.lowest_price)*0.15))*(args[1])}`,
      ),
    )
    .catch((error) => {
      console.log(error);
      message.channel.send('tracking breakout price failed');
    });
  }

}

});

共有1个答案

闻人河
2023-03-14

似乎API确实在lowest_price字段中包含了货币,这就是为什么使用它时会收到NaN。

您可以手动将其转换为一个数字,但我建议您安装currency.js包,因为使用它确实很容易。它可以从任何货币获得价值,并有内置的乘法,和你需要的减法。查看下面的工作代码:

const currency = require('currency.js');

// ... 
// ...


client.on('message', (message) => {
  if (!message.content.startsWith(prefix) || message.author.bot) return;
  const args = message.content.slice(prefix.length).trim().split(/ +/);
  const command = args.shift().toLowerCase();

  // you can change the format, localising the decimal and/or delimiter
  const zloty = (value) =>
    currency(value, { symbol: 'zł', separator: '.', decimal: ',' });

  if (command === 'calculate') {
    if (!args.length) {
      return message.channel.send(`Invalid argument`);
    } else if (args[0] === 'breakout') {
      fetch(
        'https://steamcommunity.com/market/priceoverview/?appid=730&market_hash_name=Operation%20Breakout%20Weapon%20Case&currency=6'
      )
        .then((res) => res.json())
        .then((json) => {
          // calculate the final price using currency.js only
          const finalPrice = zloty(
            zloty(json.lowest_price)
             .subtract(
               zloty(json.lowest_price)
                 .multiply(0.15)
               )
            )
            .multiply(args[1])
            .format();

          message.channel.send(`From ${args[1]} breakout cases you will get ${finalPrice}`);
        })
        .catch((error) => {
          console.log(error);
          message.channel.send('tracking breakout price failed');
        });
    }
  }
});
 类似资料:
  • 对于下面的XML,我正在尝试根据属性和节点值提取节点。 基于属性class=pass和h1包含('objectives'),我试图提取以下输出。 “目标”是节点值字符串“1任务目标”的一部分 1任务目标1目标2 下面是我正在尝试的XPath表达式。然而,这并没有产生任何输出。你能指出我做错了什么吗? 谢谢

  • 我正在使用RESTEasy客户端从API中检索JSON字符串。JSON有效负载看起来像这样: 现在,我只提取对象映射的<code>项 我将RESTEasy代理框架用于我的API方法。 REST客户端代码: RESTEasy代理接口:

  • 我使用来快速访问和修改节点。 模式的示例是:帮助管理位于内部的节点级别上的数据。json的示例是: 我面临类似json的问题: 我需要帮助来构造节点名包含句号的路径。 我尝试了以下示例,但它们对我不起作用: 你知道如何用包含的json节点构造路径吗?

  • 问题内容: 如何使用Jackson从JSON树中接收节点名称?JSON文件看起来像这样: 我有 并且需要类似的东西 谢谢。 问题答案: 此答案适用于2+之前的Jackson版本(最初写为1.8)。请参阅@SupunSameera的答案,以获取与较新版本的Jackson兼容的版本。 “节点名称”的JSON术语是“键”。由于 不包含键,因此您需要进行不同的迭代: 如果 只 需要查看键,则可以使用以下方

  • 我有以下数据结构(原始数据结构为2.5gb,因此必须进行解析): 我想提取所有值及其相应的值。最后,我计划有一个带有一列personId和一列income的df(income将是重复的)。因此,棘手的部分不仅是名称空间,还包括如何在不同的节点级别访问XML。 到目前为止,我的方法无法做到这一点。 非常感谢您的帮助。

  • 我将xml字符串转换成一个simpleXMLElement对象使用simplexml_load_string其值print_r输出 如何从这个对象中提取节点和属性值?使用 要获取正文的内容,节点未输出任何值 更新: XML字符串 是否同时提取节点值和属性