1

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

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

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

这是我得到的缩进:

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

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

4

3 回答 3

3

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

  SpreadsheetApp.getUi().alert(
    JSON.stringify(
      { x: 1, y: 2, z: [1, 2, { a: { b: 1 } }] },
      null,
      '\u{2000}'.repeat(2)
    )
  );
于 2021-11-12T17:55:48.777 回答
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 键盘输入方法


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

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

于 2021-11-12T17:48:11.970 回答
2

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

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');
}

在此处输入图像描述

于 2021-11-12T18:00:28.400 回答