当有一个子对象时,Json迭代失败

时间:2017-08-29 13:09:11

标签: javascript json

我使用php将xml字符串转换为json,然后将其发布到 我尝试迭代它的javascript文件。当对象包含多个对象时,json包含一个对象数组,就像第一个样本一样,我可以使用.length函数进行迭代,但是当对象只包含一个对象时,就不会创建数组而{{1功能失败。如何在不知道对象名称的情况下使迭代工作?

样本1:

.length

样本2:

{"class":[
   {
      "name":"history",
      "grade":"10"
   },
   {
      "name":"chemistry",
      "grade":"8"
   }
  ]
}

4 个答案:

答案 0 :(得分:1)

您可以使用for,但不需要length

var test = {"class":[
   {
      "name":"history",
      "grade":"10"
   },
   {
      "name":"chemistry",
      "grade":"8"
   }
  ]
}

for (var i in test){
    console.log(test[i]);
}

答案 1 :(得分:1)

您可以查看length,如果它undefined,这意味着它只是一个对象,那么您只需要一个元素就可以创建一个数组:

if collection.length == undefined:
  collection = [collection]

# the rest of the code doesn't need to be changed

答案 2 :(得分:1)

您可以先检查对象是否为数组:Array.isArray(obj)。如果它不是,那么你知道你不需要迭代它。

var obj = {"class":[
   {
      "name":"history",
      "grade":"10"
   },
   {
      "name":"chemistry",
      "grade":"8"
   }
  ]
}

if (!Array.isArray(obj)) return obj;
// else iterate it.

答案 3 :(得分:1)

在知道如何正确使用.length之前,您必须知道变量的数据类型。

var dataTypeLength;
var data = {
 "class":
   {
     "name":"history",
     "grade":"10"
   }
}

if (Array.isArray(data.class)) {
  dataTypeLength = data.class.length;
} else {
  dataTypeLength = Object.keys(data.class).length;
}

console.log(dataTypeLength);