1

it's frustrating that we can't select JSON elements (or really any elements) using a similar code like this:

//An JSON object is parsed into Response beforehand
for(var count = 1; count <= Response.objCount; count ++) {
  console.log(Response.obj+count.content);
}

In the code, I want to output a JSON object like this:

{ "objCount" : 2 ,
  "obj1" : { "result" : true ,
             "content" : "blah blah 1" } ,
  "obj2" : { "result" : true ,
             "content" : "blah blah 2" } }

But no, we can't use variable as whole or part of an identifier in Javascript.. So, any suggestions on how to handle such JSON objects when I want to output each and every object?

Thank you!

4

2 回答 2

2

如果“响应”是您的结构,那么您确实可以按照您的要求做:

for(var key in Response) {
  console.log(Response[key].content);
}

您不能在“长度”上循环,因为“响应”不是数组,而普通对象没有“长度”属性。

现在,一个问题是你不能确定你会以任何特定的顺序取出组件。也就是说,上面的循环可能会在你得到“obj1”之前给你“obj2”。你可以通过几种方式解决这个问题。首先,您可以重新考虑您的数据结构并将其存储为数组。或者,您可以获取键并对它们进行排序,然后遍历已排序的属性名称数组。

var keys = Object.keys(Response);
keys.sort(function(key1, key2) {
  // comparison ...
});
for (var count = 0; count < keys.length; ++count)
  console.log(Response[keys[count]].content);

该函数仅适用于较新的浏览器,但您可以使用循环Object.keys()执行类似的技巧来提取属性名称。for ... in

编辑- 使用包含您自己的显式长度属性的更新结构,您可以使用普通for循环:

for (var count = 1; count <= Response.objCount; ++count)
  console.log(Response["obj" + count].content);
于 2013-08-11T14:04:18.770 回答
1

使用方括号将属性名称作为字符串访问属性:

Response["obj" + count].content
于 2013-08-11T14:04:25.060 回答