通过 SSH 读取 CSV 并转换为 JSON
Read CSV over SSH and convert to JSON
这是这个问题的重复
这是我尝试使用的代码:
let Client = require('ssh2-sftp-client');
let sftp = new Client();
var csv = require("csvtojson");
sftp.connect({
host: 'HOST',
port: 'PORT',
username: 'USERNAME',
password: 'PASSWORD'
}).then(() => {
return sftp.get('/home/user/etc/testfile.csv');
}).then((data) => {
csv()
.fromString(data.toString()) // changed this from .fromStream(data)
.subscribe(function(jsonObj) { //single json object will be emitted for each csv line
// parse each json asynchronously
return new Promise(function(resolve, reject) {
resolve()
console.log(jsonObj);
})
})
}).catch((err) => {
console.log(err, 'catch error');
});
我可以读回 CSV 数据,并且可以看到它在 console.log(jsonObj) 上变成了 JSON 格式,但是数据不可读,所有 '\x00o\x00n\x00'' ..
我不确定该行中的操作:
// 异步解析每个 json
谁能帮忙弄清楚 CSV/JSON 从缓冲区返回后如何解析?
空字节 \x00
指向 encoding/decoding 问题。 CSV 文件可能使用 UTF-16 编码,但 Buffer.toString()
默认情况下使用 UTF-8 解码数据。您可以将其更改为 data.toString('utf16le')
(或 data.toString('ucs2')
)以强制使用正确的编码。
这是这个问题的重复
这是我尝试使用的代码:
let Client = require('ssh2-sftp-client');
let sftp = new Client();
var csv = require("csvtojson");
sftp.connect({
host: 'HOST',
port: 'PORT',
username: 'USERNAME',
password: 'PASSWORD'
}).then(() => {
return sftp.get('/home/user/etc/testfile.csv');
}).then((data) => {
csv()
.fromString(data.toString()) // changed this from .fromStream(data)
.subscribe(function(jsonObj) { //single json object will be emitted for each csv line
// parse each json asynchronously
return new Promise(function(resolve, reject) {
resolve()
console.log(jsonObj);
})
})
}).catch((err) => {
console.log(err, 'catch error');
});
我可以读回 CSV 数据,并且可以看到它在 console.log(jsonObj) 上变成了 JSON 格式,但是数据不可读,所有 '\x00o\x00n\x00'' ..
我不确定该行中的操作: // 异步解析每个 json
谁能帮忙弄清楚 CSV/JSON 从缓冲区返回后如何解析?
空字节 \x00
指向 encoding/decoding 问题。 CSV 文件可能使用 UTF-16 编码,但 Buffer.toString()
默认情况下使用 UTF-8 解码数据。您可以将其更改为 data.toString('utf16le')
(或 data.toString('ucs2')
)以强制使用正确的编码。