按resource name分组后JSON结构调整需求技术求助
解决JSON分组格式转换问题
看起来你需要把嵌套的分组JSON结构转换成更简洁的格式——提取公共的resourceName,并将每个条目的groupedMonths合并成一个列表。我来给你一步步实现这个转换:
原始输入
{"groupedResourceDtos": { "Resource PopCheck": { "9": [{ "id": 9, "resourceName": "Resource PopCheck", "groupedMonths": { "id": 9, "monthName": "Aug", "noOfLicenses": 8 } }], "10": [{ "id": 10, "resourceName": "Resource PopCheck", "groupedMonths": { "id": 10, "monthName": "Sep", "noOfLicenses": 11 } }], "11": [{ "id": 11, "resourceName": "Resource PopCheck", "groupedMonths": { "id": 11, "monthName": "Oct", "noOfLicenses": 7 } }] } }
期望输出
{"groupedResourceDtos": { "resourceName": "Resource PopCheck", "groupedMonths": [{ "id": 9, "monthName": "Aug", "noOfLicenses": 8 },{ "id": 10, "monthName": "Sep", "noOfLicenses": 11 },{ "id": 11, "monthName": "Oct", "noOfLicenses": 7 }] }}
转换实现(JavaScript示例)
下面是一个实用的代码片段,帮你完成格式转换:
// 你的原始输入数据 const inputData = { "groupedResourceDtos": { "Resource PopCheck": { "9": [{ "id": 9, "resourceName": "Resource PopCheck", "groupedMonths": { "id": 9, "monthName": "Aug", "noOfLicenses": 8 } }], "10": [{ "id": 10, "resourceName": "Resource PopCheck", "groupedMonths": { "id": 10, "monthName": "Sep", "noOfLicenses": 11 } }], "11": [{ "id": 11, "resourceName": "Resource PopCheck", "groupedMonths": { "id": 11, "monthName": "Oct", "noOfLicenses": 7 } }] } } }; // 执行转换 const convertFormat = (input) => { // 获取唯一的resourceName(如果有多个资源组,可以扩展为循环处理) const [resourceName] = Object.keys(input.groupedResourceDtos); const resourceGroup = input.groupedResourceDtos[resourceName]; // 提取所有groupedMonths条目 const groupedMonths = Object.values(resourceGroup) .map(itemArray => itemArray[0].groupedMonths); // 返回目标结构 return { groupedResourceDtos: { resourceName, groupedMonths } }; }; // 转换并打印结果 const outputData = convertFormat(inputData); console.log(JSON.stringify(outputData, null, 2));
代码说明
- 首先通过
Object.keys获取groupedResourceDtos的键,也就是我们需要的resourceName; - 接着遍历资源组下的所有子项("9"、"10"、"11"),每个子项都是一个包含单个对象的数组,我们取出数组第一个元素的
groupedMonths字段; - 最后将
resourceName和收集到的groupedMonths数组组合成你需要的格式。
如果你的输入里有多个资源组(比如groupedResourceDtos下有多个不同的resourceName键),可以把转换逻辑改成循环处理每个资源,生成一个数组结果,比如:
const convertMultipleGroups = (input) => { return { groupedResourceDtos: Object.entries(input.groupedResourceDtos).map(([resourceName, resourceGroup]) => { const groupedMonths = Object.values(resourceGroup) .map(itemArray => itemArray[0].groupedMonths); return { resourceName, groupedMonths }; }) }; };
这样就能处理多个资源组的情况啦!
内容的提问来源于stack exchange,提问作者Narayana Rao Kancharana
相关产品推荐
相关产品推荐

