我正在尝试从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;
}
答案 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