Me gustaría mostrar una alerta con un JSON bonito, pero no tiene una buena sangría.
Aquí está el código JS que estoy usando:
var jsonText = JSON.stringify(jsonObject, null, 2) SpreadsheetApp.getUi().alert(jsonText);Y aquí está la sangría que obtengo como resultado:
... "xxx": "", "xxx": "" }, { "xxx": "yyy", "xxx": "yyy", "xxx": "", "xxx": "" } ]Falta la sangría de la pestaña, ¿alguna idea de cómo podría solucionarlo?
Parece que los espacios normales \u{0020} se eliminan de la función SpreadsheetApp Ui.alert() . Puede usar cualquiera de los otros caracteres de espacio mencionados en esta respuesta como un carácter de espacio. \u{2000} funciona:
SpreadsheetApp.getUi().alert( JSON.stringify( { x: 1, y: 2, z: [1, 2, { a: { b: 1 } }] }, null, '\u{2000}'.repeat(2) ) );La única forma que conozco de imprimir bastante JSON en su ventana de alerta es obligar a JSON.stringify() a usar caracteres de espacio codificados que no se rompen para el parámetro de space .
Ejemplo:
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); }Esto genera el siguiente resultado en la ventana de alerta:
Nota : probablemente no pueda copiar / pegar esos espacios que no se rompen de mi respuesta. Creo que solo terminará copiando espacios regulares, lo que no le dará la sangría requerida (se colapsarán según las reglas estándar de HTML con respecto a espacios en blanco consecutivos) .
Entonces, en su lugar, puede ingresar manualmente los caracteres NBSP usando su teclado.
Para mí en Windows, esto fue manteniendo presionada la tecla ALT y escribiendo la secuencia numérica 0160 .
En una Mac es opt + space .
Para más sistemas, consulte métodos de entrada de teclado nbsp .
Personalmente, encuentro esto un poco desagradable, no se puede decir fácilmente que se trata de NBSP codificados, se ven como espacios en blanco regulares en su código fuente. Es por eso que agregué un comentario en el código. Si hay una solución más limpia, obtendría mi voto.
(Y usar la secuencia no funcionó para mí, se trató como una cadena literal).
Puede ver las sangrías en un área de texto:
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'); }