转换文件全内容nodejs

时间:2014-12-12 23:33:46

标签: json node.js parsing stream filesystems

我正在使用NodeJS建立一个网站,要求上传一个数据文件,然后我必须检查并(如果需要)转换该文件的内容。

源文件是JSON或XML配置文件,我只需要确保其内容格式适合应用程序的其余部分。

我想知道检查全局文件内容的最佳方法是什么。

我通常使用Streams操作文件,但我不确定它是否允许我做我想要的...

源文件的格式类似:

{
    "parameters": [{
        "name": "name",
        "settings": {
            "key": "value"
        }
    }],
    "data": [{
        "id": "1",
        "label": "label 1",
    }, {
        "id": "2",
        "label": "label 2"
    }]
}

我需要做的是解析文件的内容,并检查文件格式是否良好; 否则将文件转换为格式良好的文件:

// Read the file content

var parameters = [],
    data = [],
    p = parameters.length,
    d = data.length;

// Loop on the parameters, and check the format
while (p--) {
    var parameter = parameters[p];

    if (name in parameter && typeof parameter.name == "string") {
        // Add several rules

        parameters.push(parameter);
    }
}

// Do a similar control for "data".

// Then save the well-formatted parameters and data into a file

问题是上传的文件可能非常大...... 我可以使用变换Streams执行它吗?因为我需要检查文件的完整内容作为对象! 例如,我怎么能确定Stream变换器不会仅仅提供一部分数据呢?

1 个答案:

答案 0 :(得分:1)

我首先尝试这样的事情:

var fs = require('fs');

try {
    var inputFile = require('./config.json');
} catch (e) {
    console.log(e.message);  // Do proper error handling.
}

// Loop on the parameters, and check the format
if (!'parameters' in inputFile) {
    console.log("Got a problem here!");
}

var parameters = [];
var p = inputFile['parameters'].length;

while(p--) {
    var parameter = inputFile['parameters'][p];

    if ('name' in parameter && typeof parameter.name == 'string') {
        // Add several rules
        parameters.push(parameter);
    }
}

// Do a similar control for "data".
var data = inputFile['data'];
// More code needed here...

// Then save the well-formatted parameters and data into a file
fs.writeFileSync('./data.json', JSON.stringify({parameters: parameters, data: data}, null, 4) , 'utf-8');

如果你正在处理那些无法融入记忆的庞大文件,你就会面临更艰巨的任务。一般情况下,您无法保证部分读取会为您提供足够的JSON来解析任何内容(例如{"data": ["<FOUR PETABYTE STRING>"]})。