0
我有一个应读取JSON文件并更新此文件(writeFile)的函数。 当我调用这个函数2次或更多时,它不会更新我的文件,并且在第一次调用之后,它将在我的JSON文件的末尾添加1/2个曲形括号。 这里是我的功能:使用node.js读取和写入文件(JSON)
var fs = require('fs');
function updateJson(ticker, value) {
//var stocksJson = JSON.parse(fs.readFileSync("stocktest.json"));
fs.readFile('stocktest.json', function(error, file) {
var stocksJson = JSON.parse(file);
if (stocksJson[ticker]!=null) {
console.log(ticker+" price : " + stocksJson[ticker].price);
console.log("changing the value...")
stocksJson[ticker].price = value;
console.log("Price after the change has been made -- " + stocksJson[ticker].price);
console.log("printing the the Json.stringify")
console.log(JSON.stringify(stocksJson, null, 4));
fs.writeFile('stocktest.json',JSON.stringify(stocksJson, null, 4) , function(err) {
if(!err) {
console.log("File successfully written");
}
if (err) {
console.error(err);
}
});
}
else {
console.log(ticker + " doesn't exist on the json");
}
});
} // end of updateJson
updateJson("IBM", 77);
updateJson("AAPL", 88);
这是我原来的JSON文件(被执行该功能前):
{
"NVDA": {
"name": "Nvidia Corporation",
"symbol": "NVDA",
"logo": "nvidia.png",
"price": 0,
"prod": "Nvidia Corporation, gforce, g-force, shield"
},
"AAPL": {
"name": "Apple inc",
"symbol": "AAPL",
"logo": "apple.png",
"price": 0,
"prod": "Apple inc, mac, macbook, iphone, ipod, ipad, osx"
},
"GOOG": {
"name": "Google inc",
"symbol": "GOOG",
"logo": "google.png",
"price": 0,
"prod": "search, android, glass, drive, code school"
},
"IBM": {
"name": "ibm",
"symbol": "ibm",
"logo": "google.png",
"price": 0,
"prod": "search, android, glass, drive, code school"
}
}
这是在那里我使用updateJson
功能部分:
MongoClient.connect("mongodb://" + host + ":" + port + "/" + dbName, function (error, db){
console.log("Connection is opened to : " + "mongodb://" + host + ":" + port + "/" + dbName);
var q = async.queue(function (doc, callback) {
// code for your update
var stockName = doc.ticker;
var stockValue = doc.value;
var yUrl = "http://finance.yahoo.com/q/ks?s=" + stockName;
console.log("The url is : " + yUrl);
getStockValue(stockName, yUrl, callback, db);
// insert here the update of the json
updateJson(stockName, stockValue);
}, Infinity);
var cursor = db.collection(requiredCollection).find();
cursor.each(function(err, doc) {
if (err) throw err;
if(doc!=null) {
q.push(doc); // dispatching doc to async.queue
}
});
q.drain = function() {
if (cursor.isClosed()) {
console.log('all items have been processed');
db.close();
}
}
}); // end of connection to MongoClien
我尝试了第一个选项,我” m得到这个错误: 回调( ); TypeError:undefined不是函数 – user3502786 2014-09-05 16:49:11
这是因为第二个函数调用('updateJson(“AAPL”,88);')没有传递回调。试试这个:'updateJson(“AAPL”,88,function(){console.log('hey it worked');});' – 2014-09-05 16:51:01
好吧,第二个工作,让我说我不知道多少次我需要调用这个函数,这取决于我的其他功能,因为我从一些服务器获取一些实时数据,有任何选择以不同的方式调用此函数,我的意思是我不知道它是否会是5/10/15倍,所以我不能这样写。 – user3502786 2014-09-05 17:07:00