Javascript 组多级JSON
不确定问题标题是否是自描述性的,但下面是问题陈述:我想将多级JSON转换为多级分组JSON。我们的想法是使用这个JSON数据来创建accordion。在这方面有没有图书馆可以帮助我 提前谢谢 JSON我有-Javascript 组多级JSON,javascript,jquery,json,Javascript,Jquery,Json,不确定问题标题是否是自描述性的,但下面是问题陈述:我想将多级JSON转换为多级分组JSON。我们的想法是使用这个JSON数据来创建accordion。在这方面有没有图书馆可以帮助我 提前谢谢 JSON我有- [ { "Assessment": { "AssessmentId": 3, "AssessmentText": "CRM", "Measures": { "MeasureId": 6, "MeasureText
[
{
"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
这样的钥匙,那么它就是对象的原型,但这里不需要。