这似乎是一个简单的问题,但我在所有搜索中都找不到正确的答案。我有多个JSON对象,如下所示:
{
"crs_20868": [
{
"Thing": "foo",
"StuffNum": "13",
"Info1": [
{
"InfoColor": "Green",
"InfoId": "33637"
}
]
}
]
}
每个都将通过成功的$.ajax()
GET返回。它们都包含不同的信息,但始终以数据的整体包含数组的键名开头 - 在本例中,它是crs_20868
。我在任何时候都不知道主要包含的键名是什么,虽然我可以很容易地访问它,因为每个AJAX调用总会有一个容器数组。一个$.each()
循环得到了这个名字:
var contkey;
$.each(data, function(key, item){
contkey = key;
});
console.log(contkey); // correctly returns 'crs_20868'
(请注意,这可能不是确定包含密钥名称的最有效方法,我当然欢迎有关如何最好地返回该名称的建议 - 但这样做有点,我将在下面介绍...)
我已经通过console.log输出证明我在变量中获得了正确的包含密钥名称,似乎我应该能够利用contkey
来访问访问所需的所有任务包含数据,甚至认识到它是一个字符串。所以,它似乎应该可以正常工作:
var thing = data.contkey[0].Thing;
$('#thingid1').append(thing);
但它会返回Uncaught TypeError: Cannot read property '0' of undefined
。然而,如果我直接输入名称,即:
var thing = data.crs_20868[0].Thing;
$('#thingid1').append(thing);
foo
会附加到我的HTML ID thingid1
。然而,正如所建议的,当我运行AJAX调用时,我永远不会知道包含键名的是什么。那么:如何将该容器名称作为可重用的变量来访问该主数组中包含的对象数据,并且是否有比上面的$.each()
循环示例更有效的方式来访问它?感谢您提供的任何帮助。
答案 0 :(得分:1)
数据没有名为contkey的属性。相反,data[contkey][0].Thing
应该弹出您正在寻找的内容。
至于首先找到conkey的循环,这可能就是我最终的方式。