无法访问嵌套的Json数据

无法访问嵌套的Json数据

问题描述:

code on plunkr所以我的任务是显示一个特定的市场列表,我的目标是在选项中选择一个市场名称,以便查看其详细信息。另外,如果这个市场有任何其他的子市场,我也可以查看它们。我使用angularjs进行编码,使用嵌套的json数据并使用ui-router在不同的状态中导航(如果第一个状态显示主要市场,下一个将显示其详细信息或其子市场)。第一个州很好。但我无法找到正确的逻辑来显示下一个状态的适当数据。下面是我做了什么:无法访问嵌套的Json数据

app.controller('mktctrl', function($scope,$state){ 
$scope.mrData={ 
"supermkt":[ 
       { "id":10, 
       "name":"val1", 
       "submkt":[ 
          { "sid":101, 
          "sname":"val1.1", 
           ... , 
          "submkt":[ 
             { "sid":1011, 
              "sname":"val1.1.1", 
              ... 
             }, 
             { "sid":1012, 
              "sname":"val1.1.2", 
              ... 
             } 
             ] 
          }, 
          { "sid":102, 
           "sname":"val1.2", 
           ... 
          } 
          ], 
       "supermkt":[ 
          { "id":103, 
           "name":"val1.3", 
           "submkt":[ 
             {....} 
             ] 
          } 
          ] 
       }, 
       { "id":11, 
       "name":"val2", 
       .... 
       } 
      ] 
    }; 


    $scope.mktname=[];/*stores main top level market*/ 
    angular.forEach($scope.mrData.supermkt,function(mar){ 
    $scope.mktname.push(mar); 
    }); 

    }); 

/*现在是什么出现在第一状态就像是

VAL1列表,

VAL2 ..

我想是时候,我点击其中一个(我用ui-sref)说“val1”,我把它带到另一个只显示“val1”下的“submkt”或“supermkt”的细节或名称等等。我尝试这样做:

for(var i=0;i<$scope.mktname.length;i++) 
{ 
    for(var j=0;j<$scope.mktname[i].submkt.length<0;j++) 
    $scope.submktname.push($scope.mktname[i].submkt[j]); 
} 

上面显示的错误:“未定义不是一个对象(评估十)”(我怎么想正确地访问这些子阵列) 此外,当我写了这个代码,即使第一状态不会显示,我的应用程序页面是完全空白的。 因为我也认为上述逻辑会遍历mktname数组中的所有对象,并可能将所有(val1,val2,..)的“submkt”细节存储在submktname中,所以我无法弄清楚适当的逻辑。一些帮助详细解释会有很大帮助。谢谢。

我选中了json,并非所有的子节点都是数组类型。例如$scope.mktname[1]是对象类型而不是数组。

所以,你必须检查的节点是否是对象类型,然后再在LOP迭代像下面,更新了snippest

var app = angular.module('myApp', []); 
 

 
app.controller('MainCtrl', function($scope) { 
 
    $scope.name = 'World'; 
 

 
    $scope.mrData = { 
 
    "supermkt": [{ 
 
     "id": 10, 
 
     "name": "val1", 
 
     "submkt": [{ 
 
     "sid": 101, 
 
     "sname": "val1.1", 
 
     "submkt": [{ 
 
      "sid": 1011, 
 
      "sname": "val1.1.1", 
 
     }, { 
 
      "sid": 1012, 
 
      "sname": "val1.1.2", 
 
     }] 
 
     }, { 
 
     "sid": 102, 
 
     "sname": "val1.2", 
 
     }], 
 
     "supermkt": [{ 
 
     "id": 103, 
 
     "name": "val1.3", 
 
     "submkt": [{ 
 
      "sid": 1011, 
 
      "sname": "val1.1.1", 
 
     }, { 
 
      "sid": 1012, 
 
      "sname": "val1.1.2", 
 
     }] 
 
     }] 
 
    }, { 
 
     "id": 11, 
 
     "name": "val2", 
 
    }] 
 
    }; 
 

 
    $scope.mktname = []; /*stores main top level market*/ 
 
    $scope.submktname = []; 
 

 
    angular.forEach($scope.mrData.supermkt, function(mar) { 
 
    $scope.mktname.push(mar); 
 
    }); 
 
    
 

 

 
    for (var i = 0; i < $scope.mktname.length; i++) { 
 
    console.log($scope.mktname[i]); 
 
    console.log(Object.prototype.toString.call($scope.mktname[i].submkt)); 
 
    if (Object.prototype.toString.call($scope.mktname[i].submkt) === '[object Array]') { 
 
     for (var j = 0; j < $scope.mktname[i].submkt.length ; j++) { 
 

 
     $scope.submktname.push($scope.mktname[i].submkt[j]); 
 
     } 
 
    } 
 
    } 
 

 

 
});
<script src="https://code.angularjs.org/1.4.9/angular.js" ></script> 
 

 
<body ng-app="myApp" ng-controller="MainCtrl"> 
 
    <p> {{submktname | json}}!</p> 
 
    </body>

+0

现在没有错误。但是不会显示任何数据。我在哪里可以看到我的数据是否已经存储。 – ken

+0

添加了snippest帮助,内部也存在问题for循环条件以及 –

+0

我的问题仍然没有解决。正如我所说的,这段代码只访问submkt细节,而不是“supermkt”细节,它也是val1下子细节的一部分。此外,它还将所有超级市场的​​细节(val1,val2)放在一起,并将它们放在submktname中。我无法找到确切的逻辑。 – ken