2011-04-17 33 views
78

Tôi đang sử dụng Node.js để POST JSON lên PostBin nhưng dữ liệu bị định dạng sai (như bạn có thể thấy ở đây: http://www.postbin.org/1cpndqw).Viết JSON được định dạng trong Node.js

Đây là mã tôi đang sử dụng để kiểm tra:

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} 'nào bạn sửa chữa vấn đề của bạn? Có vẻ như bạn đã nhận dữ liệu được đăng chính xác. – Raynos

+0

Dữ liệu là chính xác nhưng "xấu xí", tôi muốn gửi như thế này, dễ hiểu hơn: http://www.postbin.org/1ijyltn#xa6rim – donald

Trả lời

9

Vâng, chủ yếu là do JSON không quan tâm làm thế nào nó được định dạng, và bạn không làm bất kỳ định dạng cho mình. Những gì bạn cần là một người làm đẹp javascript, nếu bạn quan tâm, nhưng câu hỏi đầu tiên là "Tại sao bạn quan tâm?"

Đây là mã số prettyprinting từ Công thức Javascript.

Thực ra có một loạt các ví dụ khác nhau here trên SO.

CẬP NHẬT

Được rồi, vì vậy bây giờ nó đang làm những gì bạn muốn, hãy hỏi xem bạn đang làm điều đúng đắn. Như một số người đã chỉ ra, bạn không cần phải truyền tải những dòng mới và các tab hoặc không gian đó; chi phí hiệu quả là nhỏ, có thể là trong khu vực của 2-5 phần trăm, nhưng bạn không bao giờ biết khi nào bạn có thể cần một vài phần trăm.

Mặt khác, tôi đồng ý hoàn toàn rằng thuận tiện hơn rất nhiều để có thể đọc đầu ra JSON dưới dạng văn bản được in đẹp. Nhưng có một giải pháp khác - bạn vẫn có thể sử dụng một trình duyệt để xem các kết quả này, vì vậy thay vì dùng nó để truyền tải, hãy sử dụng một trình gỡ rối phía máy khách. Tôi sử dụng JSONView for ChromeJSONView trong Firefox. Nhiều trình gỡ rối cũng sẽ đánh dấu các kết quả JSON cho bạn.

+0

Tôi muốn nhận được nội dung như sau: http: //www.postbin .org/1ijyltn # xa6rim – donald

+0

Vì mục đích truyền dẫn, bạn không muốn gửi/nhận dữ liệu định dạng bổ sung. JSON với khoảng trống thừa có nghĩa là không có gì khác biệt với máy ... nó chỉ quan trọng đối với một con người cần hiểu nó. Lý tưởng nhất, bạn chỉ muốn in nó khi bạn thực sự có một người mà cần phải nhìn vào nó. – entropo

+0

@donald tại sao bạn quan tâm đến nó trông như thế nào? JSON là dữ liệu thô. Bạn không quan tâm đến khoảng trắng. – Raynos

2

Bạn nên kiểm tra underscore-cli - đó là công cụ dòng lệnh để kiểm tra và xử lý dữ liệu JSON.

344

Sử dụng JSON.stringify(object, null, 4) trong đó 4 là số không gian để sử dụng làm đơn vị thụt lề. Bạn cũng có thể sử dụng "\t" nếu bạn muốn tab. Đây thực sự là part of the ECMAScript 5 specification và là documented on MDN.

+2

Wow, cảm ơn! Tôi tự hỏi tại sao điều này không được ghi lại nữa. Tôi cho rằng nó không có sẵn. – mrjf

+0

Vâng, thật kỳ quặc. Có lẽ nó đang trên con đường để phản đối hay gì đó? Chỉ cần một tài liệu giám sát? Không chắc. –

+6

@PeterLyons, đây là thông số kỹ thuật ECMAScript 5. Có lẽ họ không cảm thấy như đang ghi lại những thứ không phải là nút cụ thể. –

5

tôi đã sử dụng một quá trình hai bước mà tôi tìm thấy để làm việc:

var output = JSON.parse(insert_json_here); 
var print_to_file = JSON.stringify(output, null, "\t") 
Các vấn đề liên quan