在Google Sheets中使用flatMap()解析JSON并拆分列的问题求助
解决Google Sheets中JSON数据拆分至多列的问题
问题场景
Google Sheets单元格中存储的JSON结构如下:
[{"value":"example1@example.com","isPrimary":true},{"value":"example2@example.com","isPrimary":false}]
需要将所有value值和isPrimary标识拆分到不同列,最终效果为:
example1@example.com | true | example2@example.com | false
原代码const SAMPLE = value => [JSON.parse(value).result.flatMap((...))];无法实现需求,问题出在:
- 解析后的JSON本身就是数组,不存在
result属性 - 未正确遍历数组提取目标字段
可行解决方法
方法一:Google Apps Script自定义函数
编写一个自定义函数,解析JSON后提取所需字段并平铺成一维数组:
function SPLIT_JSON_EMAILS(jsonText) { if (!jsonText) return []; try { const data = JSON.parse(jsonText); // 遍历每个对象,提取value和isPrimary后平铺成一维数组 return data.flatMap(item => [item.value, item.isPrimary]); } catch (e) { return ["解析错误:无效JSON格式"]; } }
使用方式:在目标单元格输入=SPLIT_JSON_EMAILS(A1)(替换A1为存储JSON的单元格),结果会自动填充到右侧的列中。
方法二:使用Google Sheets内置公式(无需脚本)
如果不想用脚本,可结合内置公式实现:
假设JSON在A1单元格,在B1输入以下公式:
=FLATTEN(ARRAYFORMULA({JSON_EXTRACT_ARRAY(A1, "$[*].value"), JSON_EXTRACT_ARRAY(A1, "$[*].isPrimary")}))
该公式会先分别提取所有value和isPrimary组成的数组,再合并后平铺成一行,直接拆分到多列中。
内容的提问来源于stack exchange,提问作者Stefan
相关产品推荐
相关产品推荐

