节点js:以编程方式更改csv文件编码并解析为json

时间:2015-09-03 12:35:47

标签: json node.js csv encoding

我有一个带utf-16编码的csv文件,需要将其enconding更改为utf8并将其转换为JSON。我正在使用csvtojsoniconv-lite个模块。这是我的代码:

var data = fs.createReadStream("myfile.csv");
data.pipe(iconv.decodeStream('utf16'))
  .pipe(iconv.encodeStream('utf8'))
  .pipe(fs.createWriteStream("encoded.csv"));
var Converter = require("csvtojson").Converter;
var csvStr = fs.readFileSync("encoded.csv").toString();
var converter = new Converter({});
converter.fromString(csvStr, function(err, jsonObj) {
    if (err) {
        handleError(err)
    }
    console.log(jsonObj)
});

问题是iconv使用正确的编码转换csv文件,但是当我读取此文件并调用toString()方法时,它返回一个空字符串。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

我认为异步pipe可能与它有关。您可以通过在encoded.csv事件中添加逻辑来确保仅在完成后end打开var data = fs.createReadStream("myfile.csv"); data.pipe(iconv.decodeStream('utf16')) .pipe(iconv.encodeStream('utf8')) .pipe(fs.createWriteStream("encoded.csv")); data.on('end', function() { var Converter = require("csvtojson").Converter; var csvStr = fs.readFileSync("encoded.csv").toString(); var converter = new Converter({}); converter.fromString(csvStr, function(err, jsonObj) { if (err) { handleError(err) } console.log(jsonObj) }); }

var doc = XDocument.Load("XMLFile1.xml");
foreach (var fields in doc.Descendants("Fields")) {

    foreach (var field in fields.Elements("Field")) {

        Debug.WriteLine(string.Format("{0}: {1}", field.Attribute("Name").Value, field.Elements("Value").First().Value));

    }

}

https://nodejs.org/api/stream.html#stream_readable_pipe_destination_options