当我不知道密钥值时,如何从JSON响应中检索密钥?

时间:2012-08-04 01:44:54

标签: javascript json

这可能非常简单,但是我试图弄清楚我的头撞墙。

我需要从JSON响应中获取一个值,但响应中返回的键是随机的,所以我不能直接引用它来钻取它。

以下是我要回复的回复:

var c = {
         "success": { 
                    "7d40ab5352b0471cae5bdefc2e032840": { 
                          "__type__" : "user",
                          "__id__" : "7d40ab5352b0471cae5bdefc2e032840"
                    }

         },
         "errors": {}
         }

我需要的是你在那里看到的随机字符串 - ID。我已经尝试了各种各样的东西,并且不能为我的生活弄清楚如何将ID作为字符串返回。我尝试使用数组符号c.success[0][0]来获取它无济于事。显然,我不能使用点符号,因为我不知道在.success之后要放什么。

任何人都知道在事先不知道数组键的情况下该怎么做?我想确保我以一种被认为是最佳实践的方式来做这件事,而不是黑客。

谢谢...如果我错过了其他方式发布的答案,请发送给我。我搜索了几天,但找不到这个答案。

3 个答案:

答案 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"

现场演示: http://jsfiddle.net/AJaBS/

答案 2 :(得分:0)

您可以使用简单的循环:

for (var id in c.success) {
    var obj = c.success[id];
    // do something
}

如果要确保只处理对象中的第一个属性,最后可以添加break;语句。