如何将Formidable Forms默认逗号分隔ID转为字符串数组同步至Brevo
问题:Formidable Forms多选字段转数组传递至Brevo API
我正在尝试通过API将Formidable Forms的数据同步到Brevo,初始代码如下:
{ "updateEnabled": true, "email": "[376]", "emailBlacklisted": false, "smsBlacklisted": false, "attributes": { "FIRSTNAME": "[374]", "LASTNAME": "[375]", "GENRE": ["[385]"] }, "listIds": [2] }
未添加GENRE字段前代码运行正常。ID为385的字段是Formidable Forms的多选问题,选项与Brevo的GENRE属性完全匹配。Formidable Forms默认以逗号分隔的字符串返回多选字段值,但Brevo要求传入字符串数组。目前只有选择第一个选项时数据能正常传递,选其他选项时,其他字段数据正常,但GENRE字段为空。
我试过上述代码,也尝试用.split()方法转换数组:
let selectedGenres = formData[385]; let genreArray = selectedGenres.split(',').map(item => item.trim()); let apiRequest = { "updateEnabled": true, "email": "[376]", "emailBlacklisted": false, "smsBlacklisted": false, "attributes": { "FIRSTNAME": "[374]", "LASTNAME": "[375]", "GENRE": genreArray }, "listIds": [2] };
但问题仍未解决,请问如何实现将所有选中的流派以数组形式传递?
解决方案
1. 先确认字段值的实际格式
Formidable Forms的多选字段在不同场景下返回值格式有差异:
- 前端提交时可能是逗号分隔字符串
- 后端钩子(如
frm_after_create_entry)中,字段值可能直接是数组
先打印调试确认formData[385]的类型和内容:
console.log(typeof formData[385], formData[385]);
2. 兼容多格式的转换逻辑
不管字段返回的是数组还是逗号分隔字符串,统一处理成符合Brevo要求的字符串数组:
let selectedGenres = formData[385]; let genreArray = []; // 处理数组类型的返回值 if (Array.isArray(selectedGenres)) { genreArray = selectedGenres.map(item => item.trim()); } // 处理逗号分隔的字符串类型 else if (typeof selectedGenres === 'string' && selectedGenres.trim() !== '') { genreArray = selectedGenres.split(',').map(item => item.trim()); } // 未选任何选项时返回空数组 else { genreArray = []; } // 构造API请求体,注意直接取formData中的实际值,不要用占位符字符串 let apiRequest = { "updateEnabled": true, "email": formData[376].trim(), "emailBlacklisted": false, "smsBlacklisted": false, "attributes": { "FIRSTNAME": formData[374].trim(), "LASTNAME": formData[375].trim(), "GENRE": genreArray }, "listIds": [2] };
3. 关键修正点
- 移除占位符字符串:之前代码中
"[376]"这类写法是错误的,必须直接取formData对应字段的实际值,否则Brevo无法解析有效数据 - 处理边界情况:覆盖未选任何选项、单个选项、多个选项的场景,避免传递无效值导致API报错
- 匹配选项值:确保Formidable Forms中多选选项的后台存储值和Brevo的
GENRE属性选项完全一致(不是前端显示文本)
内容的提问来源于stack exchange,提问作者Danielle Potter
相关产品推荐
相关产品推荐

