2011-04-17 23 views
78

Estoy usando Node.js para POST JSON a PostBin pero los datos están formateados incorrectamente (como se puede ver aquí: http://www.postbin.org/1cpndqw).Escribir JSON con formato en Node.js

Este es el código que estoy utilizando para la prueba:

var http = require('http'); 

var options = { 
    host: 'www.postbin.org', 
    port: 80, 
    path: '/1cpndqw', 
    method: 'POST' 
}; 

var req = http.request(options, function(res) { 
    console.log('STATUS: ' + res.statusCode); 
    console.log('HEADERS: ' + JSON.stringify(res.headers)); 
    res.setEncoding('utf8'); 
    res.on('data', function (chunk) { 
    console.log('BODY: ' + chunk); 
    }); 
}); 

req.write(JSON.stringify({ a:1, b:2, c:3 }, null, 4)); 
req.end(); 
+0

'{ "a": 1, "b": 2, "c": 3}' qué te puedes solucionar el problema? Parece que tienes los datos publicados correctamente. – Raynos

+0

Los datos son correctos pero "feos", quiero enviarlos de esta manera, más fáciles de entender: http://www.postbin.org/1ijyltn#xa6rim – donald

Respuesta

9

Bueno, principalmente porque JSON no le importa cómo se formatea, y usted no está haciendo ningún formato a sí mismo. Lo que necesita es una impresora bonita de JavaScript, si le importa, pero la primera pregunta es "¿Por qué le importa?"

Aquí hay un código prettyprinting de las Javascript Recetas.

En realidad hay un montón de ejemplos diferentes here en SO.

ACTUALIZACIÓN

bien, por lo que ahora está haciendo lo que quiere, vamos a preguntar si está haciendo lo correcto. Como han señalado varias personas, no es necesario que transmita esas nuevas líneas y pestañas adicionales, o espacios; el costo de la eficiencia es pequeño, probablemente cerca del 2-5 por ciento, pero nunca se sabe cuándo podría necesitar un dos por ciento.

Por otro lado, estoy completamente de acuerdo en que es mucho más conveniente poder leer la salida JSON como texto bastante impreso. Pero hay otra solución: probablemente sigas usando un navegador para ver estos resultados, así que en lugar de imprimirlos para la transmisión, utiliza una impresora bonita del lado del cliente. Uso JSONView for Chrome y JSONView en Firefox. Muchos depuradores también imprimirán muy bien los resultados de JSON para usted.

+0

Quiero obtener algo como esto: http: //www.postbin .org/1ijyltn # xa6rim – donald

+0

Para fines de transmisión, no desea enviar/recibir datos de formato adicionales. El JSON con espacio en blanco adicional no significa nada diferente para la máquina ... solo le importa a un humano que necesita comprenderlo. Idealmente, solo desea imprimir bastante cuando realmente tiene una persona que necesita mirarlo. – entropo

+0

@donald ¿por qué te importa cómo se ve? JSON es información en bruto. No te importa el espacio en blanco. – Raynos

2

Debe verificar underscore-cli - es una herramienta de línea de comandos para inspeccionar y procesar datos JSON.

344

Use JSON.stringify(object, null, 4) donde 4 es el número de espacios para usar como unidad de sangría. También puede usar "\t" si desea pestañas. Esto es realmente part of the ECMAScript 5 specification, y es documented on MDN.

+2

¡Guau, gracias! Me pregunto por qué esto ya no está documentado. Supuse que no estaba disponible. – mrjf

+0

Sí, es extraño. Tal vez está en el camino a la depreciación o algo así? ¿Solo un descuido de documentación? No es seguro. –

+6

@PeterLyons, esto está en la especificación ECMAScript 5. Tal vez simplemente no tenían ganas de documentar cosas que no fueran específicas de un nodo. –

5

he usado un proceso de dos pasos que he encontrado para trabajar:

var output = JSON.parse(insert_json_here); 
var print_to_file = JSON.stringify(output, null, "\t") 
Cuestiones relacionadas