如何使用getJSON从文件中获取JSON数组?

我怎么能用javascript和jquery获取json文件的数组json

我对下一个代码感到满意,但它不起作用:

var questions = []; function getArray(){ $.getJSON('questions.json', function (json) { for (var key in json) { if (json.hasOwnProperty(key)) { var item = json[key]; questions.push({ Category: item.Category }); } } return questions; }) } 

这是名为:questions.json的json文件

 { "Biology":{ "Category":{ "cell":{ "question1":{ "que1":"What is the cell?" }, "option1":{ "op1":"The cell is the basic structural and functional unit", "op2":"is a fictional supervillain in Dragon Ball" }, "answer1":"opt1" } } }, "Astronomy":{ "Category":{ "Mars":{ "question1":{ "que1":"How many moons does Mars?" }, "option1":{ "op1":"5", "op2":"2" }, "answer1":"opt2" } } } } 

我希望得到一个这种格式的数组{Biology:{Category:{cell:{question1 ….}}}}

$.getJSON是一个异步函数,因此返回该函数内部的任何内容都不起作用,因为它不在范围内,或者尚未收到。 你可能应该这样做:

 function getArray(){ return $.getJSON('questions.json'); } getArray().done(function(json) { // now you can use json var questions = []; $.each(json, function(key, val) { questions[key] = { Category: val.Category }; }); }); 

for循环中的条件可防止将任何内容添加到数组中。 相反,检查您的json对象是否具有该属性,然后获取该值并将其添加到您的数组中。 换一种说法:

if (questions.hasOwnProperty(key))应该是if (json.hasOwnProperty(key))

此外,您不能简单地return这样的AJAX调用的结果,因为该方法是异步运行的。 该return实际上应用于内部success函数回调,而不是getArray 。 您必须使用回调模式才能在收到数据后传递数据,并相应地对其进行操作。

(当然,由于数组是在外部作用域中定义的,所以无论如何都不必返回它,但是如果你试图在AJAX方法结束之前使用它,那么它将是空的。)

假设您要使用名为renderJSON的方法将其呈现给DOM:

 var questions = []; function getArray(){ $.getJSON('questions.json', function (json) { for (var key in json) { if (json.hasOwnProperty(key)) { var item = json[key]; questions.push({ Category: item.Category }); } } renderJSON(questions); }); }