0

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

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

因此,例如在我假设为了调出阿达玛我会使用命令之前

scifi.Captain[1]

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

编辑 - - - - - -

我在想部分问题可能出在我正在使用的 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;
}
4

1 回答 1

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
于 2013-06-14T06:03:05.250 回答