【问题标题】:Parsing json and write file解析json并写入文件
【发布时间】:2015-11-11 21:44:02
【问题描述】:

我正面临一个奇怪的(至少对我而言)问题。我正在尝试获取(通过 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 没有更新,当我再次执行它时更新了.. 我试图理解为什么但不知道...... 如果有人可以帮助我。

提前非常感谢。

【问题讨论】:

    标签: javascript json node.js electron


    【解决方案1】:

    您的所有函数都是异步的。这意味着,您需要等待完成上一个函数才能运行下一个函数

    所以你的代码应该是这样的

    child = exec('wget ' + url1 + ' -O update.json',
    
        function(error, stdout, stderr) {
            // ...
            child = exec('wget ' + url2 + ' -O image.json',
    
                function(error, stdout, stderr) {
                    //...
    
                }
            )
        }
    )
    

    等等。您需要先下载文件,然后才能处理它们。当您的wget 进程完成时,exec 会触发回调

    为了处理回调地狱,你可以使用https://github.com/caolan/async

    【讨论】:

      猜你喜欢
      • 2022-01-12
      • 2018-05-10
      • 2015-05-24
      • 1970-01-01
      • 2022-07-06
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      • 2016-08-13
      相关资源
      最近更新 更多