Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 组多级JSON_Javascript_Jquery_Json - Fatal编程技术网

Javascript 组多级JSON

Javascript 组多级JSON,javascript,jquery,json,Javascript,Jquery,Json,不确定问题标题是否是自描述性的,但下面是问题陈述:我想将多级JSON转换为多级分组JSON。我们的想法是使用这个JSON数据来创建accordion。在这方面有没有图书馆可以帮助我 提前谢谢 JSON我有- [ { "Assessment": { "AssessmentId": 3, "AssessmentText": "CRM", "Measures": { "MeasureId": 6, "MeasureText

不确定问题标题是否是自描述性的,但下面是问题陈述:我想将多级JSON转换为多级分组JSON。我们的想法是使用这个JSON数据来创建accordion。在这方面有没有图书馆可以帮助我

提前谢谢

JSON我有-

[
  {
    "Assessment": {
      "AssessmentId": 3,
      "AssessmentText": "CRM",
      "Measures": {
        "MeasureId": 6,
        "MeasureText": "CF",
        "SubMeasures": {
          "SubMeasureId": 12,
          "SubMeasureText": "TNCF",
          "Apps": {
            "Name": "BOT",
            "Rating": 0
          }
        }
      }
    }
  },
  {
    "Assessment": {
      "AssessmentId": 3,
      "AssessmentText": "CRM",
      "Measures": {
        "MeasureId": 6,
        "MeasureText": "CF",
        "SubMeasures": {
          "SubMeasureId": 12,
          "SubMeasureText": "TNCF",
          "Apps": {
            "Name": "CPSM",
            "Rating": 0
          }
        }
      }
    }
  },
  {
    "Assessment": {
      "AssessmentId": 3,
      "AssessmentText": "CRM",
      "Measures": {
        "MeasureId": 6,
        "MeasureText": "CF",
        "SubMeasures": {
          "SubMeasureId": 12,
          "SubMeasureText": "TNCF",
          "Apps": {
            "Name": "DEA",
            "Rating": 0
          }
        }
      }
    }
  },
  {
    "Assessment": {
      "AssessmentId": 3,
      "AssessmentText": "CRM",
      "Measures": {
        "MeasureId": 8,
        "MeasureText": "DEV",
        "SubMeasures": {
          "SubMeasureId": 16,
          "SubMeasureText": "CICD",
          "Apps": {
            "Name": "BOT",
            "Rating": 0
          }
        }
      }
    }
  },
  {
    "Assessment": {
      "AssessmentId": 3,
      "AssessmentText": "CRM",
      "Measures": {
        "MeasureId": 8,
        "MeasureText": "DEV",
        "SubMeasures": {
          "SubMeasureId": 16,
          "SubMeasureText": "CICD",
          "Apps": {
            "Name": "CPSM",
            "Rating": 0
          }
        }
      }
    }
  },
  {
    "Assessment": {
      "AssessmentId": 3,
      "AssessmentText": "CRM",
      "Measures": {
        "MeasureId": 8,
        "MeasureText": "DEV",
        "SubMeasures": {
          "SubMeasureId": 16,
          "SubMeasureText": "CICD",
          "Apps": {
            "Name": "DEA",
            "Rating": 0
          }
        }
      }
    }
  }
]
[
  {
    "Assessment": {
      "AssessmentId": 3,
      "AssessmentText": "CRM",
      "Measures": {
        "MeasureId": 6,
        "MeasureText": "CF",
        "SubMeasures": {
          "SubMeasureId": 12,
          "SubMeasureText": "TNCF",
          "Apps": [{
            "Name": "CPSM",
            "Rating": 0
          },{
            "Name": "DEA",
            "Rating": 0
          },{
            "Name": "BOT",
            "Rating": 0
          }]
        }
      }
    }
  },{
    "Assessment": {
      "AssessmentId": 3,
      "AssessmentText": "CRM",
      "Measures": {
        "MeasureId": 8,
        "MeasureText": "DEV",
        "SubMeasures": {
          "SubMeasureId": 16,
          "SubMeasureText": "CICD",
          "Apps": [{
            "Name": "BOT",
            "Rating": 0
          },{
            "Name": "CPSM",
            "Rating": 0
          },{
            "Name": "DEA",
            "Rating": 0
          }]
        }
      }
    }
  }
]
我想要的-

[
  {
    "Assessment": {
      "AssessmentId": 3,
      "AssessmentText": "CRM",
      "Measures": {
        "MeasureId": 6,
        "MeasureText": "CF",
        "SubMeasures": {
          "SubMeasureId": 12,
          "SubMeasureText": "TNCF",
          "Apps": {
            "Name": "BOT",
            "Rating": 0
          }
        }
      }
    }
  },
  {
    "Assessment": {
      "AssessmentId": 3,
      "AssessmentText": "CRM",
      "Measures": {
        "MeasureId": 6,
        "MeasureText": "CF",
        "SubMeasures": {
          "SubMeasureId": 12,
          "SubMeasureText": "TNCF",
          "Apps": {
            "Name": "CPSM",
            "Rating": 0
          }
        }
      }
    }
  },
  {
    "Assessment": {
      "AssessmentId": 3,
      "AssessmentText": "CRM",
      "Measures": {
        "MeasureId": 6,
        "MeasureText": "CF",
        "SubMeasures": {
          "SubMeasureId": 12,
          "SubMeasureText": "TNCF",
          "Apps": {
            "Name": "DEA",
            "Rating": 0
          }
        }
      }
    }
  },
  {
    "Assessment": {
      "AssessmentId": 3,
      "AssessmentText": "CRM",
      "Measures": {
        "MeasureId": 8,
        "MeasureText": "DEV",
        "SubMeasures": {
          "SubMeasureId": 16,
          "SubMeasureText": "CICD",
          "Apps": {
            "Name": "BOT",
            "Rating": 0
          }
        }
      }
    }
  },
  {
    "Assessment": {
      "AssessmentId": 3,
      "AssessmentText": "CRM",
      "Measures": {
        "MeasureId": 8,
        "MeasureText": "DEV",
        "SubMeasures": {
          "SubMeasureId": 16,
          "SubMeasureText": "CICD",
          "Apps": {
            "Name": "CPSM",
            "Rating": 0
          }
        }
      }
    }
  },
  {
    "Assessment": {
      "AssessmentId": 3,
      "AssessmentText": "CRM",
      "Measures": {
        "MeasureId": 8,
        "MeasureText": "DEV",
        "SubMeasures": {
          "SubMeasureId": 16,
          "SubMeasureText": "CICD",
          "Apps": {
            "Name": "DEA",
            "Rating": 0
          }
        }
      }
    }
  }
]
[
  {
    "Assessment": {
      "AssessmentId": 3,
      "AssessmentText": "CRM",
      "Measures": {
        "MeasureId": 6,
        "MeasureText": "CF",
        "SubMeasures": {
          "SubMeasureId": 12,
          "SubMeasureText": "TNCF",
          "Apps": [{
            "Name": "CPSM",
            "Rating": 0
          },{
            "Name": "DEA",
            "Rating": 0
          },{
            "Name": "BOT",
            "Rating": 0
          }]
        }
      }
    }
  },{
    "Assessment": {
      "AssessmentId": 3,
      "AssessmentText": "CRM",
      "Measures": {
        "MeasureId": 8,
        "MeasureText": "DEV",
        "SubMeasures": {
          "SubMeasureId": 16,
          "SubMeasureText": "CICD",
          "Apps": [{
            "Name": "BOT",
            "Rating": 0
          },{
            "Name": "CPSM",
            "Rating": 0
          },{
            "Name": "DEA",
            "Rating": 0
          }]
        }
      }
    }
  }
]

如果所有
评估
对象都具有相同的
评估ID
,则可以对以下数据使用

var result = data.reduce(function(s, d, idx){
    if(idx==0){
      let apps = [];
      apps.push(s.Assessment.Measures.SubMeasures.Apps);
       s.Assessment.Measures.SubMeasures.Apps = apps;
    }else{
  s.Assessment.Measures.SubMeasures.Apps.push(d.Assessment.Measures.SubMeasures.Apps);
    }
    return s;
}, data[0]);
说明:

使用
data[0]
使用
data[0]
数组中的第一项初始化
result
对象,并将其传递给
.reduce()
调用,并将其
Assessment.Measures.SubMeasures.Apps
转换为
数组
,然后在每次迭代时将所有
Assessment.Measures.SubMeasures.Apps
推送到该数组上

演示:

var数据=[{
“评估”:{
“评估ID”:3,
“评估文本”:“CRM”,
“措施”:{
“测量”:6,
“MeasureText”:“CF”,
“子测量”:{
“亚测量”:12,
“子测量文本”:“TNCF”,
“应用程序”:{
“名称”:“机器人”,
“评级”:0
}
}
}
}
},
{
“评估”:{
“评估ID”:3,
“评估文本”:“CRM”,
“措施”:{
“测量”:6,
“MeasureText”:“CF”,
“子测量”:{
“亚测量”:12,
“子测量文本”:“TNCF”,
“应用程序”:{
“名称”:“CPSM”,
“评级”:0
}
}
}
}
},
{
“评估”:{
“评估ID”:3,
“评估文本”:“CRM”,
“措施”:{
“测量”:6,
“MeasureText”:“CF”,
“子测量”:{
“亚测量”:12,
“子测量文本”:“TNCF”,
“应用程序”:{
“名称”:“DEA”,
“评级”:0
}
}
}
}
}
];
var结果=数据.reduce(函数(s、d、idx){
如果(idx==0){
让应用程序=[];
应用程序推送(s.评估.度量.子度量.应用程序);
s、 Assessment.Measures.SubMeasures.Apps=应用程序;
}否则{
s、 评估.度量.子度量.应用程序.推送(d.评估.度量.子度量.应用程序);
}
返回s;
},数据[0]);

控制台日志(结果)
您可以将哈希表作为相同
AssessmentId
MeasureId
的引用

如果不存在散列,则使用实际数据的副本(原始数据没有变化)构建一个新对象,并将
Apps
值放入数组中。将临时opbejct推送到结果数组,并在哈希表中保留对
Apps
数组的引用

如果找到一个已知的散列,那么只需更新数组

var数据=[{评估:{AssessmentId:3,AssessmentText:“CRM”,度量:{MeasureId:6,MeasureText:“CF”,子度量:{SubMeasureId:12,SubMeasureText:“TNCF”,Apps:{Name:“BOT”,Rating:0}}}}},{评估:{AssessmentId:3,AssessmentText:“CRM”,度量:{MeasureId:6,MeasureText:“CF”,子度量:{子测量ID:12,子测量文本:“TNCF”,应用程序:{名称:“CPSM”,评级:0}}}}}},{评估:{评估ID:3,评估文本:“CRM”,度量:{测量ID:6,测量文本:“CF”,子测量:{子测量文本:12,子测量文本:“TNCF”,应用程序:{名称:“DEA”,评级:0}}}},{评估:{评估:{评估ID:3,评估文本:“CRM”,度量值:{MeasureId:8,MeasureText:“DEV”,子度量值:{SubMeasureId:16,SubMeasureText:“CICD”,应用程序:{Name:“BOT”,评级:0}}}}}},{Assessment:{AssessmentId:3,AssessmentText:“CRM”,度量值:{MeasureId:8,MeasureText:“DEV”,子度量值:{SubMeasureId:16,SubMeasureText:“CICD”,应用程序:{Name:“CPSM”,评级:0}}},{评估:{AssessmentId:3,AssessmentText:“CRM”,度量:{MeasureId:8,MeasureText:“DEV”,子度量:{子度量ID:16,子度量文本:“CICD”,应用程序:{Name:“DEA”,评级:0}}],
hash=Object.create(null),
结果=[];
data.forEach(函数(o){
var key=[o.Assessment.AssessmentId,o.Assessment.Measures.MeasureId].join(“|”),
临时雇员
if(散列[键]){
hash[key].push(o.Assessment.Measures.SubMeasures.Apps);
返回;
}
hash[key]=[o.Assessment.Measures.SubMeasures.Apps];
temp=JSON.parse(JSON.stringify(o));
temp.Assessment.Measures.SubMeasures.Apps=散列[键];
结果:推送(温度);
});
console.log(结果);

。作为控制台包装器{max height:100%!important;top:0;}
您可以轻松地手动迭代JSON,只要键(“Apps”)分组的方式是固定的……应该是
度量值
子度量值
数组?@NinaScholz我每个度量值有10个应用程序,我有3组度量值/子度量值,但它们来自服务的方式是我在示例中显示的方式。我得到30组json对象,我想将其分组为3个对象,每个对象包含10个应用程序。这意味着是吗?不是,json对象中唯一的数组将是apps。我更新了一点示例输入/输出。你能基于这一点提出建议吗。你为什么使用
hash=object.create(null)
而不是简单的
hash={}
?@cars10m,如果你有一把像
toString
这样的钥匙,那么它就是
对象的原型,但这里不需要。