2

这可能真的很简单,但我已经把头撞在墙上试图弄清楚。

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

这是我收到的回复:

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

         },
         "errors": {}
         }

我需要的是你在那里看到的随机字符串——ID。我已经尝试了各种各样的事情,但我一生都无法弄清楚如何将 ID 作为字符串取回。我试过用数组表示法c.success[0][0]来解决它,但无济于事。显然,我不能使用点符号,因为我不知道在 .success 后面放什么。

任何人都知道在事先不知道数组键的情况下该怎么做?我想确保我以一种被认为是最佳实践的方式执行此操作,而不是 hack。

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

4

3 回答 3

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
}

尽管 Šime Vidas 对 Object.keys 的使用更优雅,但您需要上述代码才能在旧浏览器中工作,除非您使用所谓的他(即,您添加一些额外的代码,让您现在可以使用新标准——即, Object.keys 的实现,它与我在上面所做的事情相同,除非内置版本已经存在,在这种情况下,shim 将优先考虑内置版本)。

于 2012-08-04T01:46:58.243 回答
2

这个:

var obj = c.success[ Object.keys( c.success )[0] ];

obj.__type__ // "user"
obj.__id__ // "7d40ab5352b0471cae5bdefc2e032840"

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

于 2012-08-04T01:47:14.890 回答
0

您可以使用一个简单的循环:

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

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

于 2012-08-04T01:49:52.797 回答