【问题标题】:JSON push to nested JSON object in javascriptJSON推送到javascript中的嵌套JSON对象
【发布时间】:2015-03-25 08:59:31
【问题描述】:

我是 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 

谁能告诉我如何实现这一目标? 请注意,实际代码的功能比上述更多,因此您可能会发现多余的变量使用。

提前致谢。

【问题讨论】:

  • 见行'tempActEffort = actEffortData[k].effort;'不再允许您的变量“tempActEffort”充当数组...!
  • 如果在您的服务器端,当客户端服务器收到响应时,您已经准备好 json 数据到您的客户端。只是一个建议
  • @Oli Soproni B. 我需要多个 JSON 对象,每个对象都有不同的结构,具体取决于要映射的一些东西。我无法在服务器端准备 jason 数据。

标签: javascript json nested-loops


【解决方案1】:

我在您的代码中观察到一件事:

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

在这里,您将变量“tempActEffort”声明为一个数组。然后您直接将某个值初始化为“tempActEffort = actEffortData[k].effort”,以便其类型从数组更改为结果类型。因此,push 不是在其上定义的函数,因为它目前不是数组类型。

因此,不要将值分配为 'tempActEffort = actEffortData[k].effort',而是将其更改为:

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

【讨论】:

  • 我按照您的建议进行了更改。错误消失了,但它仍然无法正常工作。我添加了一些 console.log() 语句来检查。努力值未定义。你能帮我吗?这是小提琴jsfiddle.net/DivB/gwkrg81a/4提前谢谢
【解决方案2】:

检查是否

tempActEffort = actEffortData[k].effort;

返回一个数组对象。推送只能应用于数组

【讨论】:

    猜你喜欢
    • 2016-12-20
    • 1970-01-01
    • 2021-08-17
    • 2017-06-23
    • 2017-02-14
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多