Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用AngularJS从嵌套JSON获取值_Javascript_Angularjs_Json_Each - Fatal编程技术网

Javascript 使用AngularJS从嵌套JSON获取值

Javascript 使用AngularJS从嵌套JSON获取值,javascript,angularjs,json,each,Javascript,Angularjs,Json,Each,我在一个嵌套的JSON对象中循环,我在访问子项时被卡住了 下面是我正在使用的JSON文件的一个示例。它通过了JSONLint测试,因此可以假定它是正常的 JSON [{ "fleetcheckitemid": "1", "checkitemdesc": "Engine oil level", "answers": [{ "fleetcheckid": "1", "checkvaluedesc": "Ok" }, {

我在一个嵌套的JSON对象中循环,我在访问子项时被卡住了

下面是我正在使用的JSON文件的一个示例。它通过了JSONLint测试,因此可以假定它是正常的

JSON

[{
    "fleetcheckitemid": "1",
    "checkitemdesc": "Engine oil level",
    "answers": [{
        "fleetcheckid": "1",
        "checkvaluedesc": "Ok"
    }, {
        "fleetcheckid": "2",
        "checkvaluedesc": "Low"
    }, {
        "fleetcheckid": "3",
        "checkvaluedesc": "Top-Up Required"
    }]
}, {
    "fleetcheckitemid": "2",
    "checkitemdesc": "Water level",
    "answers": [{
        "fleetcheckid": "1",
        "checkvaluedesc": "Ok"
    }, {
        "fleetcheckid": "2",
        "checkvaluedesc": "Low"
    }, {
        "fleetcheckid": "3",
        "checkvaluedesc": "Top-Up Required"
    }]
}, {
    "fleetcheckitemid": "3",
    "checkitemdesc": "Brake fluid level",
    "answers": [{
        "fleetcheckid": "1",
        "checkvaluedesc": "Ok"
    }, {
        "fleetcheckid": "2",
        "checkvaluedesc": "Low"
    }, {
        "fleetcheckid": "3",
        "checkvaluedesc": "Top-Up Required"
    }]
}]
我可以访问“fleetcheckitemid”和“checkitemdesc”,但无法访问“answers”:[{“fleetcheckitemid”:“2”,“checkitemdesc”:“Ok”}

在我的控制器中,我有以下代码,但只要我点击内部.each()循环,我就会得到一个错误:“TypeError:无法读取未定义的属性'length'”

app.js

$http.get("http://mymadeupdomain/api/getfleetchecks.php?fleetid=" + $scope.newFleetIDValue).success(function(data) 
{
    $scope.data = data;
    console.log("$scope.data: " + $scope.data); // WORKING - [object Object], ... [object Object] 

    $scope.answersArray = [];
    console.log("$scope.answers: " + $scope.answers); // EMPTY ARRAY - NOT INITIALISED YET 

    // Unable to access sub-items (answers) here
    $.each($scope.data, function(index, element)
    {
       var itemDescription = element.checkitemdesc; 
       console.log("itemDescription: " + itemDescription); // WORKING - Engine Oil Level

       var fleetcheckitemid = element.fleetcheckitemid; 
       console.log("fleetcheckitemid: " + fleetcheckitemid); // WORKING - 1....34

        $.each(this.answers, function(index, element)
        {
            var answers = element.answers;

            var fleetcheckid = element.fleetcheckid;
            console.log("element.fleetcheckid: " + element.fleetcheckid); // NOT WORKING
            console.log("fleetcheckid: " + fleetcheckid); // NOT WORKING
        });
    });   
});

我在这件事上哪里出了问题?会是[]吗JSON中答案周围的括号导致了这一点?

$scope.answers
上进行循环,而不是
这个。answers
。然后更改
$。每个
第二个参数名称与外部
元素
变量相同。因此,当控件进入函数内部时

$.each($scope.answers, function(index, ele) {//also change variable here
   var answers = element.answers;
   var fleetcheckid = element.fleetcheckid;
   console.log("element.fleetcheckid: " + element.fleetcheckid);
   console.log("fleetcheckid: " + fleetcheckid); // NOT WORKING
}

仍然不确定如何在
$scope.answers中填充值?

其他问题的解决方案

var-app=angular.module(“testApp”,[]);
app.controller('testCtrl',函数($scope){
$scope.data=[{
“fleetcheckitemid”:“1”,
“checkitemdesc”:“发动机机油油位”,
“答案”:[{
“fleetcheckid”:“1”,
“checkvaluedesc”:“确定”
}, {
“fleetcheckid”:“2”,
“checkvaluedesc”:“低”
}, {
“fleetcheckid”:“3”,
“checkvaluedesc”:“需要加满”
}]
}, {
“fleetcheckitemid”:“2”,
“checkitemdesc”:“水位”,
“答案”:[{
“fleetcheckid”:“1”,
“checkvaluedesc”:“确定”
}, {
“fleetcheckid”:“2”,
“checkvaluedesc”:“低”
}, {
“fleetcheckid”:“3”,
“checkvaluedesc”:“需要加满”
}]
}, {
“fleetcheckitemid”:“3”,
“checkitemdesc”:“制动液液位”,
“答案”:[{
“fleetcheckid”:“1”,
“checkvaluedesc”:“确定”
}, {
“fleetcheckid”:“2”,
“checkvaluedesc”:“低”
}, {
“fleetcheckid”:“3”,
“checkvaluedesc”:“需要加满”
}]
}];
angular.forEach($scope.data,函数(值,键){
console.log(value.fleetcheckitemid);
console.log(value.checkitemdesc);
角速度(值、答案、函数(v,k){
console.log(v.fleetcheckid);
控制台日志(v.checkvaluedesc);
});
});
});

 angular.forEach($scope.data, function(data1){
       console.log("fleetcheckitemid: " + data1.fleetcheckitemid); // WORKING - 1....34

        angular.forEach(data1.answers, function(data2)
        {
            console.log("element.fleetcheckid: " + data2.fleetcheckid); // NOT WORKING
            console.log("DESC: " + data2.checkvaluedesc); // NOT WORKING
        });
    });