Javascript - 从JSON对象(数组)中提取数据

时间:2017-09-25 20:31:27

标签: javascript arrays json

首先,我是初学者,使用Javascript和JSON。我试图在Stack Overflow上找到一个现有的答案,这有助于解决大部分问题(我头脑中)!所以,我希望有人可以提供帮助。

我有一个带有书籍信息的JSON文件,如下所示。实际文件包含约5000本书的信息。

[
  {
    "Book": "The Phenomenon",
    "Author": "Bob Bryant",
    "Author_link": "abc"
  },
  {
    "Book": "Supreme Commander of Idiots",
    "Author": "Cynthia C",
    "Author_link": "def"
  },
  {
    "Book": "An Interesting Life",
    "Author": "Doris Dodd",
    "Author_link": "ghi"
  }
]

将数组编号(0到4xxx)视为书号,我想生成一个随机数(小于5000),然后使用JavaScript从JSON文件中提取有关该书的信息。理想情况下,我想将书名,作者姓名和作者链接分配给我以后可以在面向用户的页面中使用的三个不同变量。

我尝试创建 var ,并使用 JSON.parse 从数组中提取特定数据,但它无法正常工作。我还看到了一个让我用这样的东西的例子......

var requestURL = 'filename.json';
var request = new XMLHttpRequest();
request.open('GET', requestURL);
request.responseType = 'json';
request.send();

但是,我不知道这是如何起作用的(不是它有效)。我很感激如何解决这个问题。

2 个答案:

答案 0 :(得分:1)

要获取json响应,您需要添加一个回调侦听器。请注意,您也可以将其添加为对现有函数的引用。

request.onreadystatechange = function() {
  if (request.readyState == XMLHttpRequest.DONE) {
    var json = request.responseText;

    // do stuff with the json
  }
}

要生成0到n之间的随机数,请使用Math.random() * n,其中n是最大值。

var n = json.length;
var random = Math.floor((Math.random() * n);

要引用json数据中的项目,可以使用数组和字典引用。

var randomBook = json[random];

var bookTitle = randomBook.Book
var bookAuthor = randomBook.Author
var bookAuthorLink = randomBook.Author_link

答案 1 :(得分:1)

首先,您将以项目所需的任何方式从本地JSON文件中获取数据。引用实际文件后,将其解析为有效的JSON。

var jsonData = JSON.parse(jsonFile);

然后您可以将其作为有效的JavaScript对象进行操作。因此,要从对象中获取随机书籍,请执行以下操作:

var randomBook = jsonData[Math.floor(Math.random()*(max-min+1)+min)];

(有关随机数生成的说明,请参阅this answer。)

这将从JSON对象获得minmax之间的随机书。您可以通过执行以下操作从中获取任何信息:

randomBook.Book
randomBook.Author
randomBook.Author_link