JavaScript - 按动态值加载JSON

时间:2014-01-02 14:49:20

标签: javascript json

我想加载此函数中看到的以下JSON结构。

       function load1(input) {
            var txt = '{ "kind1" : [{ "name":"blue" , "color":"blue" },{ "name":"red" , "color":"red" },{ "name":"yellow" , "color":"yellow" } ], "kind2" : [{ "name":"blue2" , "color":"blue2" },{ "name":"red2" , "color":"red2" },{ "name":"yellow2" , "color":"yellow2" } ]}';
            var obj = eval("(" + txt + ")");
            var output = "";

            for (var i in obj.kind1) {
                output += obj.kind1[i].name + ", " + obj.kind1[i].color + "<br>"
            }
            document.getElementById("content").innerHTML = output + "Eingabe: " + input
        }

现在我需要通过链接的“id”动态加载JSON的函数。

<a onclick="return load1(this.id)" id="kind1">link_product1</a>
<a onclick="return load2(this.id)" id="kind2">link_product2</a>

是否可以更改查询“obj.kind1”来执行此操作?我可以将id加载到函数中,但用“input”替换“kind1”是行不通的。任何人都可以证明这种逻辑是如何运作的?

1 个答案:

答案 0 :(得分:0)

由于您的函数体中有txt硬编码,因此在我看来,您可以对要使用的实际JavaScript对象进行硬编码,并跳过eval步骤。如果出于某种原因您不想这样做,则应使用JSON.parse代替。即使是相对较旧的浏览器(IE8)也支持它。

然后,您可以使用括号表示法访问提供的密钥:

for (var i = 0; i < obj[input].length; i++) {
    output += obj[input][i].name //etc.

编辑:基于你的“我正在使用函数getJSON”,这似乎表明你正在使用jQuery,而$.parseJSON可用。返回到getJSON回调的数据不需要解析。它应该已经是JavaScript构造。