O nativo JSON.stringify
tem a opção de tornar a saída mais legível adicionando espaços à string.
Exemplo:
var someObject = { "test": 123, "others": [ { "abc": 1 }, { "xyz": 999 } ] };
JSON.stringify(someObject, undefined, 2);
O retorno será:
{
"test": 123,
"others": [
{
"abc": 1
},
{
"xyz": 999
}
]
}
O segundo parâmetro é um substituto, que basicamente funciona como um filtro para ignorar certos valores.
Para mais informações: https://developer.mozilla.org/en-US/docs/Using_native_JSON