[英]How do I select a random object(?) from a JSON file with Javascript?
在我正在制作的Discord Bot中,它需要從JSON文件中選擇一個隨機對象。 我當前的代碼是這樣的:
function spawn(){ if (randomNum === 24) return const name = names.randomNum const embed = new Discord.RichEmbed() .setTitle(`${name} has been found!`) .setColor(0x00AE86) .setThumbnail(`attachment://./sprites/${randomNum}.png`) .setTimestamp() .addField("Quick! Capture it with `>capture`!") msg.channel.send({embed}); }
JSON文件如下所示:
{ "311": "Blargon", "310": "Xryzoz", "303": "Noot", "279": "", "312": "Arragn", "35": "Qeud", ... }
我希望它隨機選擇其中之一,例如303
,並將其張貼在豐富的嵌入物中。 我從這里做什么?
const jsonData = { "311": "Blargon", "310": "Xryzoz", "303": "Noot", "279": "", "312": "Arragn", "35": "Qeud", } const values = Object.values(jsonData) const randomValue = values[parseInt(Math.random() * values.length)] console.log(randomValue)
您可以選擇一個隨機名稱,如下所示:
// Create array of object keys, ["311", "310", ...]
const keys = Object.keys(names)
// Generate random index based on number of keys
const randIndex = Math.floor(Math.random() * keys.length)
// Select a key from the array of keys using the random index
const randKey = keys[randIndex]
// Use the key to get the corresponding name from the "names" object
const name = names[randKey]
// ...
這可以分兩步完成
使用Javascript和本地服務器加載Json文件
1>創建一個Json文件,將其命名為botNames.json ,添加您的數據。
注意:.json文件只能包含Json Object,Array或Json文字
{
"311": "Blargon",
"310": "Xryzoz",
"303": "Noot",
"279": "",
"312": "Arragn",
"35": "Qeud"
}
使用XMLHttpRequest()加載數據,您可以使用下面的函數通過回調函數和路徑作為參數來加載.json文件。
function loadJSON(callback,url) {
var xobj = new XMLHttpRequest();
xobj.overrideMimeType("application/json");
xobj.open('GET', url, true);
xobj.onreadystatechange = function () {
if (xobj.readyState == 4 && xobj.status == "200") {
callback(xobj.responseText);
}
};
xobj.send(null);
}
要生成隨機索引,可以使用以下表達式
Math.floor(lowerLimt +(upperLimit-lowerLimit + 1)* Math.Random())
這將為您提供[lowerLimit,upperLimit)范圍內的值
注意:這是可能的,因為Math.random()生成范圍為[0,1)的小數
您的回調函數將是
function callback1(response){
var botNames = JSON.parse(response)
var keys = Object.keys(botNames);
var randomProperty = keys[Math.floor(keys.length*Math.random())]
var botName = botNames[randomProperty]
console.log(botName);
}
您可以在代碼中使用上述概念作為
function loadJSON(callback,url) { var xobj = new XMLHttpRequest(); xobj.overrideMimeType("application/json"); xobj.open('GET', url, true); xobj.onreadystatechange = function () { if (xobj.readyState == 4 && xobj.status == "200") { // sending the resonse to your callback callback(xobj.responseText); } }; xobj.send(null); } function spawn(){ loadJSON(function(response){ //This is your callback function var names = JSON.parse(response) var keys = Object.keys(botNames); var randomNum = keys[Math.floor(keys.length*Math.random())] if (randomNum === 24) return const name = names[randomNum] const embed = new Discord.RichEmbed() .setTitle(`${name} has been found!`) .setColor(0x00AE86) .setThumbnail(`attachment://./sprites/${randomNum}.png`) .setTimestamp() .addField("Quick! Capture it with `>capture`!") msg.channel.send({embed}); },'/PATH_TO_YOUR_JSON/botNames.json') }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.