2017-02-11 28 views
18

Tôi đang cố viết đối tượng JSON vào tệp JSON. Mã này thực hiện mà không có lỗi, nhưng thay vì đối tượng chính nó được viết, tất cả những gì được ghi vào tệp JSON là:Viết đối tượng JSON vào tệp JSON với fs.writeFileSync

[object Object] 

Đây là mã mà thực sự làm việc viết:

fs.writeFileSync('../data/phraseFreqs.json', output) 

' đầu ra 'là một đối tượng JSON và tệp đã tồn tại. Vui lòng cho tôi biết nếu cần thêm thông tin.

+6

fs.writeFileSync ('../ dữ liệu/phraseFreqs.json', JSON.stringify (đầu ra)) – Daniel

Trả lời

27

Tôi không nghĩ rằng bạn nên sử dụng Synchronous là tốt, Asynchronously ghi dữ liệu vào một tệp tốt hơn cũng là chuỗi output nếu số object của nó.

Lưu ý: Nếu output là một chuỗi, hãy chỉ định mã hóa. và nhớ các tùy chọn flag cũng như .:

const fs = require('fs'); 
const content = JSON.stringify(output); 

fs.writeFile("/tmp/phraseFreqs.json", content, 'utf8', function (err) { 
    if (err) { 
     return console.log(err); 
    } 

    console.log("The file was saved!"); 
}); 
+0

Nếu nó được thực hiện trong một kịch bản ngắn hoặc một cái gì đó, đồng bộ là tốt. Nếu đó là một phần của yêu cầu máy chủ hoặc thứ gì đó thì nó sẽ không đồng bộ. –

+0

Không nhất thiết, các quy trình liên kết I/O phải được thực hiện không đồng bộ, nhưng tùy thuộc vào độ phức tạp của tập lệnh ngắn mà bạn có thể chọn tham gia đồng bộ. – akinjide

+0

Đây không phải là câu trả lời cho câu hỏi. –

14

Bạn cần phải xâu chuỗi đối tượng.

fs.writeFileSync('../data/phraseFreqs.json', JSON.stringify(output)); 
+0

Chào mừng bạn đến với SO, trước khi trả lời câu hỏi, hãy thử xem lại câu trả lời hiện có. Nếu câu trả lời của bạn đã được đề xuất, thay vào đó hãy trả lời câu trả lời đó. Xem [hướng dẫn cộng đồng] (https://stackoverflow.com/help/how-to-answer) để viết câu trả lời hay. – LightBender

-1

Tôi muốn thêm vào câu trả lời của akinjide.

Tôi tin rằng bạn có thể đã bối rối về điều này bởi vì, console.log (JSON_Object) sẽ in chuỗi JSON vào bảng điều khiển. Nhưng khi bạn viết cùng một tập tin, nó viết [object Object]. Điều này là do, console.log (đối tượng) sẽ chuyển đổi đối tượng JSON thành chuỗi ngầm trước khi thực sự viết nó vào bàn điều khiển, trong khi FS.writeFile() thì không. Hy vọng điều này sẽ giúp bạn hiểu.

tham khảo: Write JSON to File in Node.js-Node FS

2

làm json con người có thể đọc được với:

fs.writeFileSync('../data/phraseFreqs.json', JSON.stringify(output,null,4));

Các vấn đề liên quan