2015-03-25 73 views
0

我是JSON的新手,我正在准备从服务器收到的响应在客户端的JSON对象。 我想要的数据看起来像下面JSON推送到JavaScript嵌套的JSON对象

[ 
{"number" : "456" , 
    "effort" : [{ 
    "effort_type" : "A", 
    "act_effort" : 10 }, 
    {"effort_type" : "B", 
    "act_effort" : 20 }] 
}, 
{"number" : "123" , 
    "effort" : [{ 
    "effort_type" : "A", 
    "act_effort" : 5}, 
    {"effort_type" : "B", 
    "act_effort" : 30}, 
    {"effort_type" : "C", 
    "act_effort" : 15}] 
} 
] 

我创建从响应此JSON从服务器接收如下

$http.get('/colist').success(function(response) { 
    //console.log ("i GET the data of projects"); 

      $scope.project = response; 
} 

下面是准备我的第二个JSON对象的代码

var actEffortData = []; 
var dataSource = $scope.project; 
for(i=0; i<dataSource.length; i++){ 
    var dupCoFound="N"; 
    var currentNumber=dataSource[i].number; 
    var currentEffort = parseInt(dataSource[i].act_effort); 
    var currentEffortType= dataSource[i].effort_type; 
    if(i==0){ 
     actEffortData.push({ 
      number : currentNumber, 
      effort : { 
       effort_type:currentEffortType, 
       act_effort:currentEffort 
      } 
     }); 
    } else { 
     for(k=0; k < actEffortData.length; k++){ 
      var dupCEffFound="N"; 
      if(actEffortData[k].number == currentNumber){ 
       for(n=0; n < actEffortData[0].effort.length; n++){ 
        if(actEffortData[k].effort[n].effort_type == currentEffortType){ 
         var currentEffortTemp = actEffortData[k].effort[n].act_effort + currentEffort; 
         actEffortData[k].effort[n].act_effort = currentEffortTemp; 
         dupCEffFound="Y"; 
         break; 
        } 
       } 
       if(dupCEffFound == "N"){ 
        var tempActEffort =[]; 
        tempActEffort = actEffortData[k].effort; 
        tempActEffort.push({ 
         effort_type:currentEffortType, 
         act_effort:currentEffort 
        }); 
       } 
       dupCoFound = "Y"; 
       break; 
      } 
     } 
     if (dupCoFound=="N"){ 
      actEffortData.push({ 
       number : currentNumber, 
       effort : { 
        effort_type:currentEffortType, 
        act_effort:currentEffort 
       } 
      }); 
     } 
} 

我收到的错误如下:

Error: tempActEffort.push is not a function 

任何人都可以告诉我如何实现这一目标? 请注意,实际代码的功能超过了上述功能,因此您可能会发现冗余变量的使用情况。

在此先感谢。

+0

请参见'tempActEffort = actEffortData [k] .effort'行不再允许变量'tempActEffort'作为数组... ...! – 2015-03-25 09:04:51

+0

如果在你的服务器端,当客户端服务器收到响应时,你已经准备好json数据到你的客户端..只是一个建议 – 2015-03-25 09:05:25

+0

@Oli Soproni B.我需要多个JSON对象,每个对象都有不同的结构要绘制的东西。我无法在服务器端准备杰森数据。 – DivB 2015-03-25 11:53:56

回答

1

我在代码观察到一两件事:

var tempActEffort =[]; 
tempActEffort = actEffortData[k].effort; 

在这里,你定义的变量“tempActEffort”作为array.Then您直接初始化一些值作为“tempActEffort = actEffortData [K] .effort ',以便它的类型从数组更改为结果类型。那么,push不是一个定义在它上面的函数,因为它现在不是一个数组类型。

所以,代替 '.effort tempActEffort = actEffortData [k]的' 分配值,因为它改变为:

tempActEffort.push(actEffortData[k].effort); 
+0

我改变了你的建议。错误消失了,但仍然无法正常工作。我添加了几个console.log()语句来检查。努力价值未来定义。你能帮我一下吗?这里是小提琴http://jsfiddle.net/DivB/gwkrg81a/4/在此先感谢 – DivB 2015-03-25 12:15:22

0

检查

tempActEffort = actEffortData[k].effort; 

返回阵列对象。推只能应用于阵列