2016-07-26 41 views
1

好日子複製JSON對象,與循環的NodeJS成JSON文件

有沒有一種方法,使一對環路的NodeJS和相同的JSON對象,但不同的「身份證」複製到JSON文件。

比方說,我要以這種格式添加100個對象:

[ { "id": 1, "Firstname": "Sven","Secondname": "Petersen","Age": "18" }]

服務器啓動時。

最好的辦法是什麼?我應該使用哪些模塊?

我想我可以做這樣的事情:

for (var i = 0; i < 500; i++) { 
    fs.readFile("JSON/DB.json", "utf8", function() { 
     var data = '[{ "id": 1, "Firstname": "Sven", "Secondname": "Petersen", "Age": "18", }]' 
     var Data = JSON.parse(data); 
     var id = i; 
     for (var i = 0; i < Data; i++) { 

     }; 

     var newData = JSON.stringify(Data); 
     fs.writeFile("JSON/DB.json", newData, "utf8"); 
    }) 
}; 

P.S我是一個福利局這裏

+0

解析JSON,更改ID並重新串化它? – gcampbell

+0

我想'fs'是你想要寫入文件時搜索的模塊。我敢打賭,「如何寫文件nodejs」會給你一個很好的線索; P – Jite

+0

你能告訴我們你有什麼企圖和出錯的地方嗎?特別是你的代碼的一個例子。 – alexi2

回答

1

編輯:轉換ID字符串。

試試這個

var fs = require('fs'); 

var jsonObj = '{ "id":"1","firstname": "Sven","secondname": "Petersen","age":"18" }' 

var data = JSON.parse(jsonObj) 
var newDataArray = [] 

function ObjectCreate (id, firstname, secondname, age) { 
    this.id = id.toString(); 
    this.firstname = firstname; 
    this.secondname = secondname; 
    this.age = age; 
} 

for (var i = 1; i < 100; i++) { 
    var obj = new ObjectCreate (i, data.firstname, data.secondname, data.age); 
    newDataArray.push(obj); 
} 

var writeObject = JSON.stringify(newDataArray) 

fs.writeFile('data.json', writeObject, function(err) { 
    if(err) throw err; 
    console.log('done'); 
}); 
+0

非常感謝!在循環中使用'let'有一個小錯誤[塊範圍聲明 not supported],所以我將它改爲var。爲什麼你使用const而不是var?並且它也以某種方式寫出如下所示的ID:[{「id」:1},{「id」:2},{「id」:3},{「id」:4} ....... 。 –

+0

如果您的JavaScript版本尚不支持該類型的變量聲明,則可以用var替換所有變量聲明。這是我在ES6編碼時的習慣。您可以將id轉換爲對象函數發生器內的字符串。 – alexi2

+0

進行編輯以將id轉換爲字符串,並支持您的JavaScript版本。 – alexi2

1

從您的需求依靠。使用streams作爲衆多解決方案之一:

const fs = require('fs'); 

const PATH_TO_FILE = 'path/to/file'; 

let data = { 
    id: null, 
    value: 'some value' 
}; 

let stream = fs.createWriteStream(PATH_TO_FILE); 

//error handler 
stream.on('error', function (error) { 

}); 

for(let i = 1; i < 501; i++) { 
    data.id = i; 
    stream.write(JSON.stringify(data)); 
} 

stream.end(); 
+0

謝謝!也幫助! –

+0

Np。如果您需要編寫大量數據,則流是更可取的,而在其他情況下,您最好使用writeFile。 –