在JSON Feed中访问嵌套对象并处理未定义

时间:2012-12-11 22:36:36

标签: javascript jquery json undefined

我的问题是:

我有一个终点,它将返回包含名为the_data_i_want

的结构的JSON

如果服务器检测到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。

谢谢你!

1 个答案:

答案 0 :(得分: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 );
    }
}​

<强> Check Fiddle