将Google Sheet数据解析为JSON时如何保留换行符?
解决Google Sheets Apps Script生成JSON时换行符被双重转义的问题
问题原因
单元格中的\n是字面量字符(由\和n两个字符组成),当通过String(value)获取后,JSON.stringify会对字符串中的\自动转义,导致最终JSON中出现\\n。要让JSON中保留单个\n,需要先把字面量的\n转换为实际的换行控制字符。
修改方案
在将value转为字符串后,添加替换逻辑,把字面量的\\n替换为实际换行符:
修改代码中处理prefs和text字段的部分:
if (headers[j] === 'prefs' || headers[j] === 'text') { if (value != null) { // 将字面量的\n替换为实际换行符 obj[headers[j]] = String(value).replace(/\\n/g, '\n'); } else { obj[headers[j]] = value; } }
原理说明
String(value).replace(/\\n/g, '\n'):全局匹配字符串中的\n(两个字符),替换为实际的换行控制字符\n。- 当
JSON.stringify处理包含实际换行符的字符串时,会自动将其转义为JSON标准的\n(单个反斜杠),最终生成的JSON中就会显示"first line\nsecond line",符合需求。
完整修改后的核心代码片段
var objects = data.map(function(row) { var obj = {}; for (var j = 0; j < headers.length; j++) { var value = (row[j] === '') ? null : row[j]; if (headers[j] === 'prefs' || headers[j] === 'text') { if (value != null) { // 新增替换逻辑,将字面量\n转为实际换行符 obj[headers[j]] = String(value).replace(/\\n/g, '\n'); } else { obj[headers[j]] = value; } } else { obj[headers[j]] = value; } } return obj; });
内容的提问来源于stack exchange,提问作者soleil
相关产品推荐
相关产品推荐

