【问题标题】:Indent pretty JSON in Google Sheet Apps Script在 Google Sheet Apps 脚本中缩进漂亮的 JSON
【发布时间】:2021-11-12 16:18:14
【问题描述】:

我想用漂亮的 JSON 显示警报,但缩进效果不好。

这是我正在使用的 JS 代码:

var jsonText = JSON.stringify(jsonObject, null, 2)
SpreadsheetApp.getUi().alert(jsonText);

这是我得到的缩进:

...
"xxx": "",
"xxx": ""
},
{
"xxx": "yyy",
"xxx": "yyy",
"xxx": "",
"xxx": ""
}
]

它缺少制表符缩进,知道如何解决这个问题吗?

【问题讨论】:

  • 使用,alert(JSON.stringify([{"x":1,"y":2},{"x":1,"y":2}], null, 2)) 我可以看到带有原生 Chrome 浏览器警报对话框的缩进。 Google 的 app-scripts dialog 似乎以 HTML 格式呈现文本。因此它会尊重格式化 JSON 中的换行符,但会修剪每行的前导空格。在为元素设置 HTML 文本时,这是正常的。您必须以某种方式将空格指定为 pre,或者在 JSON 文本中添加文字空格转义字符。类似于str.replace(/ /g, ' ')
  • @Mr.Polywhirl 对于这个问题,您的评论可能是一个很好的合法答案。您可能想发布这个答案。

标签: javascript json google-apps-script


【解决方案1】:

似乎正常空格 \u{0020} 字符已从 SpreadsheetApp Ui.alert() 函数中删除。您可以使用this answer 中提到的任何其他空格字符作为空格字符。 \u{2000} 作品:

  SpreadsheetApp.getUi().alert(
    JSON.stringify(
      { x: 1, y: 2, z: [1, 2, { a: { b: 1 } }] },
      null,
      '\u{2000}'.repeat(2)
    )
  );

【讨论】:

  • 这样好多了。
  • 谢谢!效果很好,确实很干净
【解决方案2】:

我知道在警报窗口中漂亮打印 JSON 的唯一方法是强制 JSON.stringify()space 参数使用硬编码的不间断空格字符。

例子:

function popup() {
  var jsonObject = [{"x":1,"y":2},{"x":1,"y":2}];
  // warning - the two spaces used below need to be non-breaking spaces:
  var jsonText = JSON.stringify(jsonObject, null, "  ");
  SpreadsheetApp.getUi().alert(jsonText);
}

这会在警报窗口中生成以下结果:

注意 - 您可能无法从我的答案中复制/粘贴那些不间断的空格 - 我认为您最终只会复制常规空格,这不会给您所需的缩进(它们将是根据有关连续空格的标准 HTML 规则折叠)。

因此,您可以使用键盘手动输入 NBSP 字符。

在 Windows 上,我按住 ALT 键并输入数字序列 0160

在 Mac 上是 opt + space

更多系统请见nbsp keyboard entry methods


就我个人而言,我觉得这有点令人不快——你不能轻易说出这些是硬编码的 NBSP——它们看起来就像源代码中的常规空格。这就是我在代码中添加注释的原因。如果有更清洁的解决方案,我会投票。

(并且使用   序列对我不起作用 - 它被视为文字字符串)。

【讨论】:

    【解决方案3】:

    您可以在文本区域中看到缩进:

    function onMyEdit(e) {
      SpreadsheetApp.getUi().showModelessDialog(HtmlService.createHtmlOutput(`<textarea cols="30" rows="12">${JSON.stringify(e,['range','columnStart','rowStart','value','source','rowEnd','rowStart','oldValue'],10)}</textarea>`),'Simple Dialog');
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多