6

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....}}}}

4

2 に答える 2

9

$.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 };
    });
});
于 2013-02-17T01:15:01.843 に答える
3

ループ内の条件forにより、配列に何も追加されなくなります。代わりに、json オブジェクトにプロパティがあるかどうかを確認し、値を取得して配列に追加します。言い換えると:

if (questions.hasOwnProperty(key))する必要がありますif (json.hasOwnProperty(key))

returnまた、メソッドは非同期で実行されるため、そのような AJAX 呼び出しの結果を単純にすることはできません。これreturnは、実際にはsuccessではなく、内部関数のコールバックに適用されますgetArray。受信したデータのみを渡すには、コールバック パターンを使用し、それに応じて操作する必要があります。

(もちろん、配列は外側のスコープで定義されているため、とにかく返す必要はありませんが、AJAX メソッドが終了する前に使用しようとすると、空になります。)

と呼ばれるメソッドを使用して DOM にレンダリングするとしますrenderJSON

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);
    });
}
于 2013-02-17T01:00:23.263 に答える