You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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));

逻辑说明

  1. 辅助函数parseKeyValue:专门处理各种键值对字符串,包括带双引号的格式(比如"Role" = "GS"),先去除所有双引号,再按=分割成键和值。
  2. 遍历分组:
    • 遇到Id = x时,开启一个新的条目对象,同时把之前完成的条目存入结果数组;
    • Time和Topic直接赋值给当前条目;
    • 遇到GUEST时,初始化当前条目的GUEST数组;
    • 每遇到一个Role就创建一个新的嘉宾对象,等后续的Infos字段来补全,补全后就把这个嘉宾对象推入GUEST数组;
  3. 收尾处理:遍历结束后,把最后一个未存入的条目加入结果数组。

输出结果

运行代码后,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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:26:55