从JQUERY中的JSON关联数组调用值

时间:2013-06-14 05:55:16

标签: jquery json object associative-array

我正在尝试从JSON关联数组调用值。我找到了困难,因为我的对象被包裹在“[]”中。例如:

var scifi = [
    {
        "Show":"TNG",
        "Ship":"Enterprise",
        "Captain":"Picard"
    },
    {
        "Show":"BSG",
        "Ship":"Galactica",
        "Captain":"Adama"
    },
    {
        "Show":"Firefly",
        "Ship":"Serenity",
        "Captain":"Reynolds"
    }
]

所以例如在我假设为了召唤Adama之前我会使用命令

scifi.Captain[1]

然而,这似乎完全失败了。任何建议都表示赞赏。

EDIT -----------

我认为问题的一部分可能出在我正在使用的ajax中。

$.ajax({
    url: './php/scifishows.php',
    type: 'POST',
    //dataType: 'json',
    data:
        {
            show: fav_show
        },
    success: function(output)
        {
            alert(output[1].Captain);

        }
});

这是导致括号的php代码,它循环遍历mysql结果并将它们放在一个对象中。这当然是由上面的ajax调用的。

$all = array();
while( ($row = mysql_fetch_assoc($result)) ) {
    $all[] = $row;
}

1 个答案:

答案 0 :(得分:3)

[]表示JSON中的数组,{}同样表示对象。

所以至少在你的例子中,因为它是[{},{},...]形式,你必须首先通过数组访问,然后是对象。

// something like
var foo = scifi[1].Captain;

请注意,你所拥有的是一个关联数组(至少是“关联数组”在Javascript中的定义)。

要拥有类似于关联数组的东西,你仍然可以使用对象:

var scifi = {
    TNG : {
        Ship : 'Enterprise',
        Captain : 'Picard'
    },
    BSG : {
        Ship : 'Galactica',
        Captain : 'Adama'
    },
    Firefly : {
        Ship : 'Serenity',
        Captain : 'Reynolds'
    }
};

然后你就可以访问:

var foo = scifi.TNG.Captain;   // Picard
var bar = scifi.BSG.Ship;      // Galactica

如果真的必须使用您所拥有的格式,但想使用我提供的格式,那么您只需转换原始数据:

var new_scifi = {};
$.each(scifi, function (i,v) {
    new_scifi[v.Show] = {
        Ship = v.Ship,
        Captain = v.Captain
    };
});

console.log(new_scifi.Firefly.Captain);  // Reynolds