JavaScript实现:从指定数组生成嵌套JSON数组
数组转嵌套JSON的实现方案
嘿,我来帮你搞定这个数组转嵌套JSON的需求!这里有一个JavaScript的实现方案,完美匹配你想要的结构:
代码实现
const myArray = [ "Id = 1", "Time = 18:40", "Topic = yyyyyyyyyyyy", "GUEST", "Role = HS", "Infos = Arizona", "Role = GS", "Infos = Arizona", "Role = GS", "Infos = Colorado", "Id = 2","Time = 11:32", "Topic = xoxo", "GUEST", "\"Role\" = \"GS\"", "Infos = California", "Role = CS", "Infos = Maryland", "Role = GS","Infos = Nevada" ]; function convertToNestedJson(arr) { const result = []; let currentEntry = null; let currentGuest = null; // 辅助函数:解析键值对,处理带引号的情况 const parseKeyValue = (str) => { const cleaned = str.replace(/"/g, ''); const [key, value] = cleaned.split(' = '); return { key, value }; }; for (const item of arr) { if (item.startsWith('Id = ')) { // 如果已有未完成的条目,先存入结果数组 if (currentEntry) { result.push(currentEntry); } // 初始化新的条目对象 const { value } = parseKeyValue(item); currentEntry = { Id: value }; } else if (item.startsWith('Time = ')) { const { value } = parseKeyValue(item); currentEntry.Time = value; } else if (item.startsWith('Topic = ')) { const { value } = parseKeyValue(item); currentEntry.Topic = value; } else if (item === 'GUEST') { // 初始化嘉宾数组 currentEntry.GUEST = []; } else if (item.includes('Role = ')) { // 创建新的嘉宾对象,等待后续的Infos字段 const { value } = parseKeyValue(item); currentGuest = { Role: value }; } else if (item.startsWith('Infos = ')) { // 给当前嘉宾添加Infos字段,并存入嘉宾数组 const { value } = parseKeyValue(item); currentGuest.Infos = value; currentEntry.GUEST.push(currentGuest); currentGuest = null; } } // 把最后一个未存入的条目加入结果 if (currentEntry) { result.push(currentEntry); } return result; } // 转换并输出结果 const myJson = convertToNestedJson(myArray); console.log(JSON.stringify(myJson, null, 2));
逻辑说明
- 辅助函数
parseKeyValue:专门处理各种键值对字符串,包括带双引号的格式(比如"Role" = "GS"),先去除所有双引号,再按=分割成键和值。 - 遍历分组:
- 遇到
Id = x时,开启一个新的条目对象,同时把之前完成的条目存入结果数组; Time和Topic直接赋值给当前条目;- 遇到
GUEST时,初始化当前条目的GUEST数组; - 每遇到一个
Role就创建一个新的嘉宾对象,等后续的Infos字段来补全,补全后就把这个嘉宾对象推入GUEST数组;
- 遇到
- 收尾处理:遍历结束后,把最后一个未存入的条目加入结果数组。
输出结果
运行代码后,myJson的结构如下:
[ { "Id": "1", "Time": "18:40", "Topic": "yyyyyyyyyyyy", "GUEST": [ { "Role": "HS", "Infos": "Arizona" }, { "Role": "GS", "Infos": "Arizona" }, { "Role": "GS", "Infos": "Colorado" } ] }, { "Id": "2", "Time": "11:32", "Topic": "xoxo", "GUEST": [ { "Role": "GS", "Infos": "California" }, { "Role": "CS", "Infos": "Maryland" }, { "Role": "GS", "Infos": "Nevada" } ] } ]
内容的提问来源于stack exchange,提问作者mamesaye
相关产品推荐
相关产品推荐

