将 csv 转换为 json 添加 '\r' 字符
Converting csv to json adds '\r' characters
我有一个将 csv 转换为 json 数据的方法:
代码如下:
CSV2JSON(): void {
const lines = this.csvData.split('\n');
const result = [];
const headers = lines[0].split(',');
console.log(headers);
for (let i = 1; i < lines.length - 1; i++ ) {
const obj = {};
const currentline = lines[i].split(',');
for (let j = 0; j < headers.length; j++) {
obj[headers[j]] = currentline[j];
}
result.push(obj);
}
console.log(JSON.stringify(result)); // JSON
}
这给了我:
[{"name":"test1","code z\r":"0.030\r"}]
如您所见,'\r'
不应该存在。
如何去除那些 \r
或阻止它们出现在 json 数据中?
您的问题在于行尾,而不是 Angular。不同的操作系统对如何编码“换行”字符有不同的标准;在解析人类可读的字符串(例如 CSV 格式)时,这是一个常见的恼人问题。例如,您详细阅读了 on Wikipedia。
你得到的 \r
可能意味着原始文件有 \n\r
作为行尾。当您在 \n
处进行拆分时,右侧部分将保留前导 \r
。要同时删除 \r
,您必须按 \n\r
拆分,将整个组视为一个新行。
const s = `foo\n\rbar`
console.log(s.split('\n')) // bad
console.log(s.split('\n\r')) // good
但是如果你盲目地这样做,你会错过新行 是 只是 \n
.
的情况
const s = `foo\nbar`
console.log(s.split('\n')) // good
console.log(s.split('\n\r')) // bad
要处理两者,您可以先将 \n\r
的所有实例替换为 \n
,然后拆分。
const s = `foo\n\rbar\nbaz`
console.log(s.replace(/\n\r/g, '\n').split('\n'))
但是,使用此代码,您将错过仅使用 \r
作为新行的其他操作系统。您也可以处理这种情况,或者使用现有的库来解析 CSV。 NPM 存储库中可能有一些可供选择。
我有一个将 csv 转换为 json 数据的方法:
代码如下:
CSV2JSON(): void {
const lines = this.csvData.split('\n');
const result = [];
const headers = lines[0].split(',');
console.log(headers);
for (let i = 1; i < lines.length - 1; i++ ) {
const obj = {};
const currentline = lines[i].split(',');
for (let j = 0; j < headers.length; j++) {
obj[headers[j]] = currentline[j];
}
result.push(obj);
}
console.log(JSON.stringify(result)); // JSON
}
这给了我:
[{"name":"test1","code z\r":"0.030\r"}]
如您所见,'\r'
不应该存在。
如何去除那些 \r
或阻止它们出现在 json 数据中?
您的问题在于行尾,而不是 Angular。不同的操作系统对如何编码“换行”字符有不同的标准;在解析人类可读的字符串(例如 CSV 格式)时,这是一个常见的恼人问题。例如,您详细阅读了 on Wikipedia。
你得到的 \r
可能意味着原始文件有 \n\r
作为行尾。当您在 \n
处进行拆分时,右侧部分将保留前导 \r
。要同时删除 \r
,您必须按 \n\r
拆分,将整个组视为一个新行。
const s = `foo\n\rbar`
console.log(s.split('\n')) // bad
console.log(s.split('\n\r')) // good
但是如果你盲目地这样做,你会错过新行 是 只是 \n
.
const s = `foo\nbar`
console.log(s.split('\n')) // good
console.log(s.split('\n\r')) // bad
要处理两者,您可以先将 \n\r
的所有实例替换为 \n
,然后拆分。
const s = `foo\n\rbar\nbaz`
console.log(s.replace(/\n\r/g, '\n').split('\n'))
但是,使用此代码,您将错过仅使用 \r
作为新行的其他操作系统。您也可以处理这种情况,或者使用现有的库来解析 CSV。 NPM 存储库中可能有一些可供选择。