Nodejs从数据中读取文件并创建对象

时间:2016-05-31 09:46:56

标签: node.js file

我正在尝试编写nodejs程序。我有一个文件data.json,它包含json对象。对于每个对象,我必须添加另一个键作为review,value作为文本文件数据。在这里,我编写了用于从json文件中读取数据的代码,在该文件中,为我插入键和值对的每个对象。并存储在一个名为' matter'的数组中,在下面的代码中,我使用回调将数据发布到调用函数。但回调正在执行之前'#循环'在Fetchdata函数中。如何在for循环后调用callback。

var fs = require('fs');
var jf = require('jsonfile')
var file = '../data/data.json'

function readfile(str,callback) {
    fs.readFile(str, function (err, data) {
       callback && callback(data.toString());

    });
}

function Fetchdata(callback) {
    var matter = [];
    jf.readFile(file, function (err, jsonData) {
        var j=0;
        for (var i = 0; i < jsonData.length; ++i) {

            obj = jsonData[i];
            var purchase_url = obj["purchase_url"];
            if (purchase_url.indexOf("flipkart") > -1) {

                var ss = purchase_url.split("pid=");
                if (ss[1]) {
                    var s2 = ss[1].split('&');
                    readfile(s2[0],function(some){
                        "use strict";
                        obj["review"]= some;
                        matter.push(obj);
                    })
                }
            }
        }
    callback && callback(matter);

    });

}

Fetchdata(function (some) {
    console.log(some[0]);
});

1 个答案:

答案 0 :(得分:2)

您可以使用readFile的同步版本

function readfile(filename,callback) {
    callback(fs.readFileSync(filename).toString())
}

readFile的同步版本不会继续到下一行。它将返回文件的内容。

您也可以在一行fs.readFileSync(str,'utf-8')而不是使用toString执行此操作。

更多信息