我正在使用 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
问题是上传的文件可能非常大...我可以使用转换流来执行吗?因为我需要将文件的完整内容作为对象进行检查!例如,我如何确定流转换器不会只提供部分数据的块?
我会先尝试这样的事情:
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>"]}
)。