【问题标题】:How to get JSON array from file with getJSON?如何使用 getJSON 从文件中获取 JSON 数组?
【发布时间】:2013-02-01 17:46:42
【问题描述】:

如何使用 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....}}}}

【问题讨论】:

    标签: javascript jquery arrays json


    【解决方案1】:

    $.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 };
        });
    });
    

    【讨论】:

    • 顺便说一句,我怎么能得到天文学的例子? console.log(questions[1].[Astronomy]),这样可以吗?
    • 试试 console.log(questions[1][Category])
    • 你试过questions.Astronomy吗?使用这种方式的键实际上会变成一个对象,所以如果你想要一个数字索引数组,那么 push() 将是一种方法。
    【解决方案2】:

    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);
        });
    }
    

    【讨论】:

    • @chikatetsu 为我工作:jsfiddle.net/H2jQD。 “不工作”是什么意思?你希望它做什么?
    • P.S. @whoeverdownvoted 总是很好解释为什么...OP 在我的帖子之后更改了代码,因此您无法看到旧问题。
    猜你喜欢
    • 2014-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-25
    相关资源
    最近更新 更多