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
相关产品推荐
相关产品推荐

