gpt4 book ai didi

javascript - 使用 fs 读取文件后解析 Json

转载 作者:行者123 更新时间:2023-11-30 15:55:56 26 4
gpt4 key购买 nike

我正在尝试在两个 node.js 脚本之间建立通信。第一个执行获取请求并将响应写入文件。第二个看修改后的文件,然后读取,提示结果。

第一个(get then write)

var request = require('request');
var parseString = require('xml2js').parseString;
var fs = require('fs');

//Some needed variables

streamInterval = setInterval(function() {
request.get(addr, function (error, response, body) {
if (!error && response.statusCode == 200) {
parseString(body,{ explicitArray : false, ignoreAttrs : true }, function (err, result) {
var jsonResult = JSON.stringify(result);
var result = JSON.parse(jsonResult);

fs.writeFile(outputDeparts, JSON.stringify(result, null, 4), function(err) {
if(err) {
console.log(err);
}
});

});
}else{
console.log("An error occured : " + response.statusCode);
}
}).auth(LOGIN,PASS,true);
}, 30000);

第二个(变化后观察,阅读提示)

var fs = require('fs');

//Some needed variables


fs.watch(outputDeparts, (eventType, filename) => {
console.log(`event type is: ${eventType}`);
if (filename) {
console.log(`filename provided: ${filename}`);
fs.readFile(outputDeparts, 'utf8', function (err, data) {
if (err){
throw err;
}else{
console.log('start parsing');
console.log(data);
var result = JSON.parse(data);
var departs = result["passages"]["train"];
console.log(`next train [${departs[0]["num"]}] at : ${departs[0]["date"]}`);
}
});
} else {
console.log('filename not provided');
}
});

第一次更改文件一切正常!但 30 秒后,在第二次更改时,我收到以下错误:

undefined:1

SyntaxError: Unexpected end of input
at Object.parse (native)
at /Users/adobe/Documents/workspace/playWithNode/watchFile.js:17:23
at tryToString (fs.js:414:3)
at FSReqWrap.readFileAfterClose [as oncomplete] (fs.js:401:12)

我认为这是异步读取/写入文件的问题,但没有设法找到修复...每个人都可以帮助我或有线索吗?谢谢

最佳答案

..不鼓励异步访问文件系统,因为在访问时,目标文件可能会被应用程序生命周期中的某些内容修改。

我建议您使用 fs.readFileSync 并将 JSON.parse 包装在 try-catch 中

var fs = require('fs');

function onNextTrain(data) {
console.log("onNextTrain", data);

return data;
}

fs.watch(outputDeparts, (eventType, filename) => {
return new Promise((resolve, reject) => {
if(!filename) {
return reject("FILE NAME NOT PROVIDED");
}

let
data = fs.readFileSync(filename, 'utf8'),
result
;

try {
result = JSON.parse(data);
} catch(error) {
result = data;
}

return resolve(result);
})
.then(onNextTrain)
.catch(err => console.log("error", err))
;
});

关于javascript - 使用 fs 读取文件后解析 Json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38546460/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com