如何用JavaScript转换嵌套JSON,合并指定键值为数组?
解决方案
你可以通过嵌套使用Array.map()结合对象遍历的方式实现结构转换,核心逻辑是处理每个fotos子项的字段重组:
const originalData = [ { "fotos": [ { "foto": "foto 1", "zz0": "first line.", "zz1": "second line.", "zz2": "third line." }, { "foto": "foto 2", "zz0": "first line." } ] } ]; const transformedData = originalData.map(item => ({ fotos: item.fotos.map(photoEntry => { // 将foto字段转为数组 const foto = [photoEntry.foto]; // 收集并排序所有zz开头键对应的值 const tekst = Object.entries(photoEntry) .filter(([key]) => key.startsWith('zz')) // 按zz后的数字排序,保证顺序正确 .sort(([keyA], [keyB]) => { const numA = parseInt(keyA.slice(2), 10); const numB = parseInt(keyB.slice(2), 10); return numA - numB; }) .map(([_, value]) => value); return { foto, tekst }; }) })); console.log(JSON.stringify(transformedData, null, 4));
关键步骤说明
- 外层
map遍历原数组的顶层对象,针对每个对象的fotos数组做处理 - 内层
map遍历每个fotos子项:- 直接把
foto字段的值包装为数组 - 用
Object.entries()获取子项的所有键值对,过滤出以zz开头的键 - 对过滤后的键按
zz后缀的数字排序,避免键顺序混乱导致的内容顺序错误 - 提取排序后的值组成
tekst数组
- 直接把
- 最后返回重组后的对象结构,得到目标JSON格式
内容的提问来源于stack exchange,提问作者backnext
相关产品推荐
相关产品推荐

