如何用Google Sheet Apps Script格式化JSON文本?
解决Google Sheet中JSON文本格式化的问题
你现在的代码没达到预期效果,核心问题有两个:
- 单元格里的JSON是非标准格式:所有键名没有加双引号,不符合JSON规范,直接解析会报错
- 代码没先把字符串转成JS对象,直接用
JSON.stringify处理原字符串,只会输出转义后的原文本,不会格式化
下面是修正后的代码,能直接生成你想要的格式化效果:
function formatSheetJSON() { var ss = SpreadsheetApp.getActive(); // 获取单元格里的原始JSON字符串 var rawJson = ss.getRange('N145').getValue(); // 第一步:把非标准JSON转成标准格式——给所有键名加上双引号 var standardJson = rawJson.replace(/([{,]\s*)([a-zA-Z0-9_]+)(\s*:)/g, '$1"$2"$3'); try { // 第二步:把标准JSON字符串解析成JS对象 var jsonObj = JSON.parse(standardJson); // 第三步:格式化输出,缩进3个空格 var formattedJson = JSON.stringify(jsonObj, null, 3); // 弹出格式化后的结果,也可以改成写入到其他单元格 SpreadsheetApp.getUi().alert(formattedJson); // 示例:写入到O145单元格 // ss.getRange('O145').setValue(formattedJson); } catch (err) { SpreadsheetApp.getUi().alert('解析出错:' + err.message); } }
关键步骤说明:
- 正则替换:
replace方法匹配{或,后面的键名,自动给它们加上双引号,解决非标准JSON的问题 JSON.parse:将标准JSON字符串转换成可操作的JS对象JSON.stringify的第三个参数3:指定格式化时的缩进空格数,让结构更清晰
运行这段代码后,就能得到你期望的带缩进、键名带双引号的格式化JSON结构。
内容的提问来源于stack exchange,提问作者Knight
相关产品推荐
相关产品推荐

