Получить все значения в случайно выбранном объекте JSON

#javascript #json #object #random

#javascript #json #объект #Случайный

Вопрос:

Я извлекаю список объектов из вызова json. Это кавычки со значениями ‘Author’ и ‘Text’. Вот небольшой пример.

 0:
author: "Thomas Edison"
text: "Genius is one percent inspiration and ninety-nine percent perspiration."
__proto__: Object
1:
author: "Yogi Berra"
text: "You can observe a lot just by watching."
__proto__: Object
  

Затем я выбираю случайный объект из списка. Я не могу понять, как получить оба значения из выбранного объекта. Я могу получить текст и автора отдельно, но, похоже, я не могу получить их оба

они работают

 data[ Math.floor(Math.random() * data.length) ]['text']
data[ Math.floor(Math.random() * data.length) ]['author']
  

Я пробовал это, и ни одна из них не работает

 data[ Math.floor(Math.random() * data.length) ]['author','text']
data[ Math.floor(Math.random() * data.length) ]['author'],['text']
  

Заранее спасибо

Ответ №1:

Вы можете сначала получить объект, а затем получить значения текста и автора:

 var obj = data[ Math.floor(Math.random() * data.length) ];

console.log(obj.text, obj.author);
  

Но используя это:

 data[ Math.floor(Math.random() * data.length) ]['text']
data[ Math.floor(Math.random() * data.length) ]['author']
  

вероятно, вы получите неправильную (text, author) пару, например, он может получить вам пару ("You can observe a lot just by watching.", "Thomas Edison") , что неверно, потому что объект, выбранный при получении текста, может отличаться от объекта, выбранного при получении автора, это Math.floor(Math.random() * data.length) связано с тем, что повторный вызов, вероятно, даст разные результаты для каждого вызова.

Ответ №2:

В вашем подходе вы генерируете случайный выбор для каждого автора и выбора цитаты. Сохраните свой случайный выбор в одной другой переменной, затем выберите этот индекс из массива.

 import random
class Quote:
  def __init__(self, author, quote):
    self.author = author
    self.quote = quote

# Get the quotes list from the api call
quote1=Quote('Thomas Edison','Genius is one percent inspiration and ninety-nine percent perspiration.')
quote2=Quote('Yogi Berra','You can observe a lot just by watching.')
quotesList=[quote1,quote2]
####

#Using random number generator to get random choce less than max lenght of fetched list
maxListLen=len(quotesList)-1
randomChoice=random.randint(0, maxListLen)

print(quotesList[randomChoice].author,' ',quotesList[randomChoice].quote)