正在解析 json 并写入文件
Parsing json and write file
我遇到了一个奇怪的(至少对我而言)问题。我正在尝试获取(通过 wget 下载)一个 json 文件,解析它并提取一些内容(图像 url)。然后将此内容存储在一个数组中,该数组保存在一个 txt 文件中。最后,我再次使用 wget 下载图像 url 列表。
我对这个应用使用 Electron.io。 Ajax 函数启用以执行此 nodejs 函数:
expressApp.get('/update', function(req, res) {
var util = require('util'),
exec = require('child_process').exec,
child, url1 = 'http://xxxxxx/api/product/';
exec = require('child_process').exec,
child, url2 = 'http://xxxxxx/api/image/';
child = exec('wget ' + url1 + ' -O update.json',
function(error, stdout, stderr) {
console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);
console.log('Content updated!')
if (error !== null) {
console.log('exec error: ' + error);
}
});
child = exec('wget ' + url2 + ' -O image.json',
function(error, stdout, stderr) {
console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);
console.log('Image.json downloaded!')
if (error !== null) {
console.log('exec error: ' + error);
}
});
var file = __dirname + '/image.json';
var file_updated = __dirname + '/image_name.txt';
fs.readFile(file, 'utf8', function(err, data) {
if (err) {
console.log('Error: ' + err);
return;
}
data = JSON.parse(data);
var arr = data.objects.map(function(item) {
return item.image;
})
var arr_updated = arr.toString();
// console.log(arr);
fs.writeFile(file_updated, '', function() {
fs.writeFile(file_updated, arr_updated, function(err) {
if (err) return console.log(err);
console.log('List of image url added!');
fs.readFile(file_updated, 'utf-8', function(err, data) {
if (err) {
return console.log(err);
}
var result = data.replace(/,/g, '\n');
fs.writeFile(file_updated, result, 'utf8', function(err) {
if (err) return console.log(err);
});
});
});
})
});
// child = exec('wget -i ' + file_updated + ' -P images', {maxBuffer: 1024 * 100000},
// function (error, stdout, stderr) {
// console.log('stdout: ' + stdout);
// console.log('stderr: ' + stderr);
// console.log('Images downloaded!')
// if (error !== null) {
// console.log('exec error: ' + error);
// }
// });
});
我的问题是当我执行一次这个脚本时,image_text.txt 没有更新,当我再次执行它时更新了..我试图理解为什么但不知道......
如果有人能帮助我。
提前致谢。
你所有的函数都是异步的。这意味着,在 运行 下一个
之前,您需要等待完成上一个功能
所以你的代码应该是这样的
child = exec('wget ' + url1 + ' -O update.json',
function(error, stdout, stderr) {
// ...
child = exec('wget ' + url2 + ' -O image.json',
function(error, stdout, stderr) {
//...
}
)
}
)
等等。您需要先下载文件,然后才能处理它们。 exec
在您的 wget
进程完成后触发回调
为了处理回调地狱你可以使用https://github.com/caolan/async包
我遇到了一个奇怪的(至少对我而言)问题。我正在尝试获取(通过 wget 下载)一个 json 文件,解析它并提取一些内容(图像 url)。然后将此内容存储在一个数组中,该数组保存在一个 txt 文件中。最后,我再次使用 wget 下载图像 url 列表。
我对这个应用使用 Electron.io。 Ajax 函数启用以执行此 nodejs 函数:
expressApp.get('/update', function(req, res) {
var util = require('util'),
exec = require('child_process').exec,
child, url1 = 'http://xxxxxx/api/product/';
exec = require('child_process').exec,
child, url2 = 'http://xxxxxx/api/image/';
child = exec('wget ' + url1 + ' -O update.json',
function(error, stdout, stderr) {
console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);
console.log('Content updated!')
if (error !== null) {
console.log('exec error: ' + error);
}
});
child = exec('wget ' + url2 + ' -O image.json',
function(error, stdout, stderr) {
console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);
console.log('Image.json downloaded!')
if (error !== null) {
console.log('exec error: ' + error);
}
});
var file = __dirname + '/image.json';
var file_updated = __dirname + '/image_name.txt';
fs.readFile(file, 'utf8', function(err, data) {
if (err) {
console.log('Error: ' + err);
return;
}
data = JSON.parse(data);
var arr = data.objects.map(function(item) {
return item.image;
})
var arr_updated = arr.toString();
// console.log(arr);
fs.writeFile(file_updated, '', function() {
fs.writeFile(file_updated, arr_updated, function(err) {
if (err) return console.log(err);
console.log('List of image url added!');
fs.readFile(file_updated, 'utf-8', function(err, data) {
if (err) {
return console.log(err);
}
var result = data.replace(/,/g, '\n');
fs.writeFile(file_updated, result, 'utf8', function(err) {
if (err) return console.log(err);
});
});
});
})
});
// child = exec('wget -i ' + file_updated + ' -P images', {maxBuffer: 1024 * 100000},
// function (error, stdout, stderr) {
// console.log('stdout: ' + stdout);
// console.log('stderr: ' + stderr);
// console.log('Images downloaded!')
// if (error !== null) {
// console.log('exec error: ' + error);
// }
// });
});
我的问题是当我执行一次这个脚本时,image_text.txt 没有更新,当我再次执行它时更新了..我试图理解为什么但不知道...... 如果有人能帮助我。
提前致谢。
你所有的函数都是异步的。这意味着,在 运行 下一个
之前,您需要等待完成上一个功能所以你的代码应该是这样的
child = exec('wget ' + url1 + ' -O update.json',
function(error, stdout, stderr) {
// ...
child = exec('wget ' + url2 + ' -O image.json',
function(error, stdout, stderr) {
//...
}
)
}
)
等等。您需要先下载文件,然后才能处理它们。 exec
在您的 wget
进程完成后触发回调
为了处理回调地狱你可以使用https://github.com/caolan/async包