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

How to get JSON array from file with getJSON?

本文关键字:获取 JSON 数组 文件 何使用 getJSON      更新时间:2023-09-26

如何使用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"
            },
            "answerswer1":"opt1"
        }
    }
},
"Astronomy":{
    "Category":{
        "Mars":{
            "question1":{
                "que1":"How many moons does Mars?"
            },
            "option1":{
                "op1":"5",
                "op2":"2"
            },
            "answerswer1":"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);
    });
}