JSON 推送到 javascript 中嵌套的 JSON 对象
JSON push to nested JSON object in javascript
我是 JSON 的新手,我正在根据从服务器收到的响应在客户端准备一个 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
谁能告诉我如何实现这一目标?
请注意,实际代码具有比上述代码更多的功能,因此您可能会发现冗余变量的使用。
提前致谢。
我在您的代码中观察到一件事:
var tempActEffort =[];
tempActEffort = actEffortData[k].effort;
在这里,您将变量 'tempActEffort' 声明为 array.Then,您直接将一些值初始化为 'tempActEffort = actEffortData[k].effort',以便它的类型从数组更改为结果类型。因此,push 不是在其上定义的函数,因为它目前不是数组类型。
因此,不要将值分配为 'tempActEffort = actEffortData[k].effort',而是将其更改为:
tempActEffort.push(actEffortData[k].effort);
检查是否
tempActEffort = actEffortData[k].effort;
返回了一个数组对象。推送只能应用于数组
我是 JSON 的新手,我正在根据从服务器收到的响应在客户端准备一个 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
谁能告诉我如何实现这一目标? 请注意,实际代码具有比上述代码更多的功能,因此您可能会发现冗余变量的使用。
提前致谢。
我在您的代码中观察到一件事:
var tempActEffort =[];
tempActEffort = actEffortData[k].effort;
在这里,您将变量 'tempActEffort' 声明为 array.Then,您直接将一些值初始化为 'tempActEffort = actEffortData[k].effort',以便它的类型从数组更改为结果类型。因此,push 不是在其上定义的函数,因为它目前不是数组类型。
因此,不要将值分配为 'tempActEffort = actEffortData[k].effort',而是将其更改为:
tempActEffort.push(actEffortData[k].effort);
检查是否
tempActEffort = actEffortData[k].effort;
返回了一个数组对象。推送只能应用于数组