2015-03-25 65 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; 

返回陣列對象。推只能應用於陣列