Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 转换文件完整内容节点_Json_Node.js_Parsing_Stream_Filesystems - Fatal编程技术网

Json 转换文件完整内容节点

Json 转换文件完整内容节点,json,node.js,parsing,stream,filesystems,Json,Node.js,Parsing,Stream,Filesystems,我正在用NodeJS建立一个网站,它要求上传一个数据文件,然后我必须检查并(如果需要)转换这个文件的内容 源文件是一个JSON或XML配置文件,我只需要确保其内容对于应用程序的其余部分格式良好 我想知道检查全局文件内容的最佳方法是什么 我通常使用流操作文件,但我不确定它是否允许我做我想做的事情 源文件具有类似的格式: { "parameters": [{ "name": "name", "settings": { "key": "v

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

源文件是一个JSON或XML配置文件,我只需要确保其内容对于应用程序的其余部分格式良好

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

我通常使用流操作文件,但我不确定它是否允许我做我想做的事情

源文件具有类似的格式:

{
    "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”:[“”]}
)。

文件读取而不是流式传输。。。我很惊讶这是一个限制,但我会通知用户,我不认为任何人有一个限制。否则我无论如何也帮不了他:)顺便说一句,用“require”代替NodeJS文件系统有什么好处?
require
在.json文件上将文件读取和json解析合并到一个命令中。请记住,它将缓存结果,因此在更改该文件时需要重新启动服务器。我没有真正考虑过这一点,谢谢您的帮助!