按语言维度动态生成JSON数组的JSON转换实现咨询
按语言维度动态生成JSON数组的JSON转换实现咨询
嘿,这个转换需求的核心其实就是按语言维度做分组聚合,我给你分享一套通用的实现逻辑,再拿JavaScript举个具体的代码例子,不管你用什么语言,思路都是相通的~
核心逻辑步骤
先理清楚转换的核心思路,其实就三步:
- 遍历输入里的每一个
Items元素,提取它的optionNumber和对应的ListItems语言条目 - 用一个临时的“语言-选项列表”映射(比如JS里的普通对象、Java里的HashMap)来做分组:把每个语言对应的
optionNumber和value存到对应语言的数组里 - 最后把这个映射转换成你需要的
Response数组格式
JavaScript代码实现示例
下面是直接可以运行的JS代码,完全匹配你的输入输出需求:
// 模拟你的输入request对象 const request = { "Items": [ { "id": "151", "optionNumber": 1, "ListItems": [ { "language": "en", "value": "Aruba" }, { "language": "en-gb", "value": "Arubagb" }, { "language": "fr-fr", "value": "" } ] }, { "id": "152", "optionNumber": 2, "ListItems": [ { "language": "en", "value": "Afganistan" }, { "language": "en-us", "value": "" } ] } ] }; // 1. 创建临时映射,用来按语言分组存储选项信息 const languageOptionMap = {}; // 遍历每个Item条目 request.Items.forEach(item => { const currentOptionNum = item.optionNumber; // 遍历当前Item下的所有语言-值条目 item.ListItems.forEach(listItem => { const { language, value } = listItem; // 如果映射里还没有这个语言,先初始化对应的数组 if (!languageOptionMap[language]) { languageOptionMap[language] = []; } // 将当前选项的信息添加到对应语言的数组中 languageOptionMap[language].push({ optionNumber: currentOptionNum, optionValue: value }); }); }); // 2. 将临时映射转换为要求的Response结构 const output = { "Response": Object.entries(languageOptionMap).map(([lang, options]) => ({ language: lang, optionValues: options })) }; // 打印结果,格式和你要的完全一致 console.log(JSON.stringify(output, null, 2));
关键细节说明
- 空值处理:代码会保留所有空的
value(比如fr-fr的空值),完全符合你的示例输出 - 自动聚合:如果同一个语言在多个
Items里出现,所有对应的选项都会被自动聚合到同一个语言的optionValues数组中 - 通用适配:这个逻辑可以轻松移植到其他语言,比如Java用
HashMap<String, List<自定义Option类>>,Python用字典列表,核心都是“按语言分组”
备注:内容来源于stack exchange,提问作者Shreyansh Jain
相关产品推荐
相关产品推荐

