如何使用 Discord.js 显示 .JSON 文件的内容?

Posted

技术标签:

【中文标题】如何使用 Discord.js 显示 .JSON 文件的内容?【英文标题】:How do you display content of a .JSON file using Discord.js? 【发布时间】:2020-06-01 22:55:23 【问题描述】:

目前我的代码显示为

if(message.content.startsWith(prefix + 'readback')) 

  fs.readFile('msgs.json', (err, data) => 
    if (err) throw err;
    let _msgs = JSON.parse(data);
    message.channel.send(_msgs);
    console.log(_msgs)
  );

包含所有适当的常量和变量

在使用 prefix + 'readback 时,Discord Bot 将 _msgs 显示为 [object Object] - 为了确保这不是代码问题,我添加了 console.log(_msgs),并且正确的 JSON 文件内容显示在控制台中.有没有办法让 Bot 在频道中显示 JSON 文件的内容?

【问题讨论】:

message.channel.send() 使用 toString() 方法将 _msgs 转换为字符串,该方法将为 json 对象返回类似于 [object Object] 的内容;您可能想尝试使用 JSON.stringify() 【参考方案1】:

您可以利用discord markdown。

代码块,就像 Stack Overflow 上一样,可用于格式化代码,甚至添加颜色:

```json  

    "some": "json"

```

将呈现如下:

现在,正如 Xander Kyle 在评论中所说,您想将 JSON.stringify 用作 message.channel.send 使用 toString 将变量转换为字符串,但它不能“按您的意愿”用于对象。

fs.readFile('msgs.json', (err, data) => 
  if (err)  throw err; 
  const _msgs = JSON.stringify(JSON.parse(data), null, 2);
  message.channel.send('```json\n' + _msgs + '\n```');
  console.log(_msgs)
);

stringify 中的 2 使 json 缩进 (documentation)

【讨论】:

【参考方案2】:

这是我使用的代码,它将格式为 JSON 的对象发送到通道。

var msg = '\```json\n'
for (var key in jsobj) 
    if (jsobj.hasOwnProperty(key)) 
        msg = msg + "\n \"" + key + "\": \"" + jsobj[key] + "\","
                            

msg = msg.substring(0, msg.length - 1)
msg = msg + "\n\`\`\`"
message.channel.send(msg);

jsobj 变量将是您的 JSON 对象。

【讨论】:

【参考方案3】:
fs.readFile('msgs.json', (err, data) => 
  if (err) throw err;
  let _msgs = JSON.stringify(JSON.parse(data), null, 2);
   message.channel.send(_msgs);
   console.log(_msgs)
);

这会将 JSON 格式化为带有 2 个空格缩进的多行。

如果你这样做:

message.channel.send(data);

然后你会得到 JSON 但没有格式。

【讨论】:

以上是关于如何使用 Discord.js 显示 .JSON 文件的内容?的主要内容,如果未能解决你的问题,请参考以下文章

discord.js:JSON 星球属性未定义

如何在 discord.js 中使用 JSON 数据库制作排行榜

Discord.js 备份 json 文件

将 JSON 中的值获取到 discord.js 嵌入中

现在显示 URL 图片 discord.js

如何从 discord.js 中的 JSON 对象中检索消息作为对象?