【问题标题】:Javascript - Extracting data from JSON object (array)Javascript - 从 JSON 对象(数组)中提取数据
【发布时间】:2017-09-25 20:31:27
【问题描述】:

首先,我是使用 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();

但是,我不知道这是如何工作的(不是说它正在工作)。如有任何有关如何解决此问题的指导,我将不胜感激。

【问题讨论】:

  • 你的 JSON 文件真的是这样吗? JSON 文件必须以 { 开头并以 } 结尾。
  • 查看从文件系统加载 JSON 的资源。 nodejs.org/api/fs.html 一旦你把它放在内存中,它就很简单。 var book = books[Math.floor((Math.random() * books.length) ]
  • @Koborl 我不认为 OP 使用 Node 能够使用 fs
  • 除非 JSON 文件是动态创建的,否则只需在开头添加 var books = 并将其包含在您的 HTML 中。无需请求或解析。这样您就可以使用books[i].Author 等访问数组数据。
  • @Kesava 我想你已经看过this关于 JSON 有效性的回答了?

标签: javascript arrays json


【解决方案1】:

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

var jsonData = JSON.parse(jsonFile);

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

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

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

这将从 JSON 对象中获得介于 minmax 之间的随机书。您可以通过以下方式从中获取任何信息:

randomBook.Book
randomBook.Author
randomBook.Author_link

【讨论】:

  • "从本地 JSON 文件中抓取数据" 我该怎么做?我尝试了 XMLHttpRequest,但 Chrome 拒绝访问本地文件。
  • 使用了来自link 的一些想法来访问 JSON 数据。现在可以了。非常感谢您的帮助。
【解决方案2】:

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

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

    // do stuff with the json
  }
}

要生成一个介于零和 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

【讨论】:

  • 我正在尝试加载本地 JSON 文件,但 Chrome 显示“跨源请求仅支持协议方案:http、data、chrome、chrome-extension、https。”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-22
  • 2019-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-01
相关资源
最近更新 更多