2015-10-05 133 views
2

解析单个json对象时出现问题。如何使用angular JS将JSON对象添加到JSON数组中?

假设下面的数据从服务器

 { 
      "root": { 
       "data": [ 
        { 
         "name": "Raj", 
         "age": "22" 
        }, 
        { 
         "name": "Janu", 
         "age": "22" 
        } 
       ] 
      } 
     } 

获取和我的剧本是

的script.js

 var myApp=angular.module('myApp',[]); 
     myApp.controller('myCtrl', function($scope, $http){ 
      $http.get("manydata.json") 
      .success(function(response) { 
       $scope.myDatas = response.root; 
      }); 
     }); 

HTML

<div ng-repeat="i in myDatas.data"> 

      Name: {{i.name}} 
      Age: {{i.age}} 

    </div> 

我虽然没问题respo如果响应数据是1,那么json将是:

{ 
     "root": { 
     "data": { 
      "name": "Raj", 
      "age": "22" 
     } 
     } 
    } 

如何一般地解析这些json数据?

PLNKR:http://plnkr.co/edit/W4YK6BDtIBfVhnPpHVm1?p=preview

+0

您是否尝试过在服务器端修复此问题?例如,你可以在没有数据的情况下返回一个空数组,应该通过HTTP请求解析得很好。 – Avalanche

回答

3

你只需要细微的变化,检查类型。如果它不是数组,则将其转换为数组。这是你的代码变成的。 这里是plnkr

// Code goes here 

var myApp=angular.module('myApp',[]); 
myApp.controller('myCtrl', function($scope, $http){ 
    $http.get("singledata.json") 
    .success(function(response) { 
     if(response.root.data && !(response.root.data instanceof Array)){ 
     response.root.data=[response.root.data] 
     } 

     $scope.myDatas = response.root; 

    }); 
}); 
3

我会检查数据是否是一个数组或没有,如果没有,只是ammend的数据是一个数组:

像这样:

$http.get("singledata.json") 
.success(function(response) { 
    if(response.root.data && !angular.isArray(response.root.data)){ 
    var object = response.root.data; 
    response.root.data = []; 
    response.root.data.push(object); 
    } 
    $scope.myDatas = response.root; 
}); 
2

您可以检查数据是否阵列与否。如果没有,那么你创建数组为。检查此代码的工作。

对于控制器:

var myApp=angular.module('myApp',[]); 
myApp.controller('myCtrl', function($scope, $http){ 
$http.get("manydata.json") 
.success(function(response) { 
    var data = response.root.data; 
    if(data.constructor === Array){ 
    $scope.myDatas = data; 
    }else{ 
    $scope.myDatas = new Array(data); 
    } 
}); 
}); 

对于HTML:

<div ng-repeat="i in myDatas"> 

     Name: {{i.name}} 
     Age: {{i.age}} 

</div> 

希望这有助于。