2

我的问题是这样的:

我有一个端点,它将返回包含名为的结构的 JSON:the_data_i_want

如果服务器检测到有一个值,the_data_i_want那么它会返回如下内容:

{
    "sample": {
        "title": "The Title",
        "foo": {
            "Bar": {
                "Baz": {
                    "Qux": {
                        "the_data_i_want": "DATA PARTY!!!!"
                    }
                }
            }
        }
    }
}

如果服务器检测到它the_data_i_want是空的,它返回的 JSON 看起来像这样:

{
    "sample": {
        "title": "The Title"
    }
}

我的问题是,因为链的任何部分sample.foo.Bar.Baz.Qux.the_data_i_want我都是undefined我最终通过json结构对每个步骤进行这些疯狂的检查链,我首先查看它是否未定义,然后如果不是,我尝试下一个下一个,直到我到达the_data_i_want,这似乎是错误的。

问题:

有没有“正确”的方法来处理这个问题?即使嵌套任意深,我该怎么办?我愿意使用 jQuery。

谢谢你!

4

1 回答 1

1

可能这可能有效..但可能有更好的方法..

在这种方法中,我将所有键都放在一个数组中,并在循环中检查它们。

var obj = {
    "sample": {
        "title": "The Title",
        "foo": {
            "Bar": {
                "Baz": {
                    "Qux": {
                        "the_data_i_want": "DATA PARTY!!!!"
                    }
                }
            }
        }
    }
};

var arr = ["foo", "Bar", "Baz", "Qux", "the_data_i_want"];
var arr1 = ["foo", "Bar", "Baz", "Qux", "the_data_i_want", "ding"];

checkKey('Object 1' , arr);
checkKey('Object 2 ' ,arr1);

function checkKey(str ,arr) {
    if (obj && obj.sample) {
        var k = obj.sample;
        var i = 0;
        for (var i = 0; i < arr.length; i++) {
            if (k[arr[i]]) {
                k = k[arr[i]];
                if (i === arr.length - 1) {
                    alert('Data Found :: ' + k);
                }
            }
            else {
                alert('No such Key in :: ' + str );
                break;
            }
        }
    }
    else {
         alert('No such Key in :: ' + str );
    }
}​

检查小提琴

于 2012-12-11T22:55:48.210 回答