这可能非常简单,但是我试图弄清楚我的头撞墙。
我需要从JSON响应中获取一个值,但响应中返回的键是随机的,所以我不能直接引用它来钻取它。
以下是我要回复的回复:
var c = {
"success": {
"7d40ab5352b0471cae5bdefc2e032840": {
"__type__" : "user",
"__id__" : "7d40ab5352b0471cae5bdefc2e032840"
}
},
"errors": {}
}
我需要的是你在那里看到的随机字符串 - ID。我已经尝试了各种各样的东西,并且不能为我的生活弄清楚如何将ID作为字符串返回。我尝试使用数组符号c.success[0][0]
来获取它无济于事。显然,我不能使用点符号,因为我不知道在.success之后要放什么。
任何人都知道在事先不知道数组键的情况下该怎么做?我想确保我以一种被认为是最佳实践的方式来做这件事,而不是黑客。
谢谢...如果我错过了其他方式发布的答案,请发送给我。我搜索了几天,但找不到这个答案。
答案 0 :(得分:2)
for (var prop in c.success) {
alert(c.success[prop].__id__); // Replace the alert with whatever you want to do with the ID
// break; // Uncomment if there can be more than one ID returned and you only want one
}
如果密钥与__id__
值相同,则可以执行以下操作:
for (var prop in c.success) {
alert(prop); // Replace the alert with whatever you want to do with the ID
// break; // Uncomment if there can be more than one ID returned and you only want one
}
虽然ŠimeVidas使用Object.keys更优雅,但除非你使用所谓的他(即你添加一些额外的代码,让你今天使用新的标准),你需要上面的代码才能在旧的浏览器中使用 - -ie,Object.keys的实现,它与我上面做的一样,除非已经存在内置版本,在这种情况下,shim将优先使用内置版本。)
答案 1 :(得分:2)
此:
var obj = c.success[ Object.keys( c.success )[0] ];
obj.__type__ // "user"
obj.__id__ // "7d40ab5352b0471cae5bdefc2e032840"
答案 2 :(得分:0)
您可以使用简单的循环:
for (var id in c.success) {
var obj = c.success[id];
// do something
}
如果要确保只处理对象中的第一个属性,最后可以添加break;
语句。