如何将变量传递给JSON搜索循环?

时间:2015-11-26 12:15:11

标签: javascript json

我有以下代码可以正常工作: -

    $.getJSON("shipping.json")
.done(function(data) {
    getUniqueCountries = function() {
        var countries = [];

        $.each(data.Services.intl.en, function( i, item ) {
            if (countries.length==0) {
                countries += item.countries;
            }
            else
            {
                countries += "," + item.countries;
            }
        });
    }
})

但是,我想制作$ .each动态的第一部分,因为这可能是基于预定义变量的3种可能性之一,例如。

var foo = "intl"

所以新行应为: -

$.each(data.Services.foo.en, function( i, item )

我可以添加另一行代码并使用一个工作正常的eval,但要明白这不是最佳实践。即。

var foo = "intl";
var bar =  eval("data.Services." + foo + ".en");

$.each(bar, function( i, item )

我尝试过使用JSON.parse(似乎是google上流行的解决方法)而不是eval,即

var bar =  JSON.parse("data.Services." + foo + ".en");

但是收到错误:

  

'意外的令牌d'。

如果需要,可以使用JSON文件的片段: -

{
"Services": {
    "intl": {
        "en": [
            {
                "service": "PREMIER",
                "countries": "United Kingdom",
                "date": "Thursday 24th 10:00"
            }
        ]
    }
}

}

所以我想知道如何将变量foo传递给JavaScript以获取正确的数据而不会出错,不使用Eval函数,或者我最好使用Eval函数吗?

提前感谢您提供任何帮助

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您应该能够执行以下操作:

$.each(data.Services[foo].en, function( i, item ) {
        if (countries.length==0) {
            countries += item.countries;
        }
        else
        {
            countries += "," + item.countries;
        }
    });

可以访问javascript对象中的属性,就像访问数组中的特定键一样。例如,您可以执行window.location或window [" location"]

希望这有帮助

答案 1 :(得分:0)

实际上相当简单。 JavaScript支持使用[]表示法的动态对象键:

data.Services[foo].en // Where foo = 'intl' or something.