初学者JavaScript,JSON索引问题:为什么我的for脚本失败?

时间:2018-11-19 18:39:27

标签: javascript json for-loop indexing

我不是经验丰富的Javascript编码员,或者对JSON不太熟悉。我的方法很幼稚。欢迎提出更好的方法建议。

这是我的代码。

<!DOCTYPE html>
<html>
  <head>
    <script>
      database = {
        "name": "AdventureWorks2012 vs AdventureWorksModified",
        "children": [{
          "name": "Person",
          "children": [{
            "name": "Address",                     
            "children": [{
              "name": "AddressID",
              "attributes": {
                "coltype": "int",
                "coldefault": null,
                "colordinal": 1,
                "colCharLength": null
              }
            }]
          },{
            "name": "Address",                     
            "children": [{
              "name": "AddressID",
              "attributes": {
                "coltype": "int",
                "coldefault": null,
                "colordinal": 1,
                "colCharLength": null
              }
            }]
          }]
        },{
          "name": "PersonDELETEmePLEASE",
          "children": [{
            "name": "Address",                     
            "children": [{
              "name": "AddressID",
              "attributes": {
                "coltype": "int",
                "coldefault": null,
                "colordinal": 1,
                "colCharLength": null
              }
            }]
          }]
        }]
      }

      console.log(`name : ${database.name}`);
      console.log("=SCHEMAS=");
      for (var i in database.children){
        console.log(`name : ${database.children[i].name}`);
        console.log("children: (-TABLES-)");  

        for (var j in database.children){
          console.log(`name : ${database.children[i].children[j].name}`);
          console.log("children: (-COLUMNS-)");

          for (var k in database.children[i].children[j].children){
            console.log(`name : ${database.children[i].children[j].children[k].name}`);
            console.log("children: (-DATA-)");

            for (var l in database.children[i].children[j].children[k].attributes){
              console.log(`${l} : ${database.children[i].children[j].children[k].attributes[l]}`);
            }
          }
        }
        console.log("\n\n\n");  
      }
    </script>
  </head>
  <body>
  </body>
</html>

结构是数据库->模式->表->列+列数据。

AdventureWorks2012与AdventureWorksModified->人员->地址->地址ID +属性。

如标题中所述,我正在尝试遍历一些JSON数据。无论是输出到HTML还是输出到控制台,我都会在一个奇怪的情况下遇到错误:每当一个模式只有一个表时。它可以有一个孩子,也可以有一个数据成员,但是必须有多个表。

这是我得到的错误:

This is the error I get.

请帮助我理解:循环中是什么导致这种情况发生?在开始寻找解决方法并最终导致自己陷入困境之前,我想问一下。

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

您的两个循环在同一事物上循环

for (var i in database.children) { <-- same
  for (var j in database.children) <-- same

您忘记引用嵌套了

for (var i in database.children) { <-- first level
  for (var j in database.children[i].children) <-- second level
    console.log(database.children[i].children[j])