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

JSON结构调整及JavaScript循环处理异常技术问询

问题解答

1. JSON对象外置与结构修改

  • JSON对象完全可以外置:你可以把这段JSON单独保存为.json格式文件(比如form-data.json),在JavaScript中通过import语句或fetch方法引入;也可以在JS文件里定义成独立变量,示例:

    const externalFormData = [
      {
        "_id": "Untitled Form",
        "title": "Untitled Form",
        "answer": [/* 原回答数据 */]
      }
    ];
    

    这种方式既方便单独维护数据,也能在多个场景下复用。

  • JSON结构可按需修改:从你的代码逻辑来看,核心需求应该是把answer数组中每个对象的answers字段键名规范化(去除特殊字符、转为下划线小写),并将这些字段直接合并到外层对象中,而非保留原answers再新增data_fix属性。以下是对应修正方案。

2. JavaScript数据处理代码修正

你的现有代码仅将规范化后的键值对封装到data_fix对象中,再作为新属性添加到原对象里,这就是“仅向数组中添加值”的原因。调整逻辑,将data_fix的字段展开到外层,同时移除冗余的answers属性:

const newData = forms.map((item) => {
  const mappedAns = item.answer.map((data) => {
    const dataFix = {};
    Object.keys(data.answers).forEach((key) => {
      const cleanedKey = key
        .replace(/[{()}]/g, "")
        .replace(/ :/g, "")
        .replace(/ /g, "_")
        .toLowerCase();
      dataFix[cleanedKey] = data.answers[key];
    });
    // 合并原数据(剔除answers)与规范化字段
    return { 
      ...data, 
      ...dataFix, 
      answers: undefined 
    };
  });
  return { ...item, answer: mappedAns };
});

修正后效果

处理后的单个answer对象结构如下:

{
  "username": "jansenstan2410@gmail.com",
  "date": "2022-11-02",
  "formId": "6361c5aaf7a02c177ebebb27",
  "test": ["New Option"],
  "email": "john@nabatisnack.com",
  "dropdown": "New Option",
  "radio": "3",
  "time": "17:25"
}

注意:原data中的date字段与answers里的date字段重名,合并后会保留原data的date值(即"2022-11-02")。若需要保留answers中的日期,可在规范化时给键名重命名,比如改为answer_date。

若需保留原answers属性,只需删除代码中的answers: undefined即可,但会存在字段重复,建议根据实际需求选择。

内容的提问来源于stack exchange,提问作者JS24

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 08:55:17