在 Node.js 中添加 Headers 到 CSV 和 Return 具有匹配字符串的行
Add Headers to CSV and Return Row with Matching String in Node.js
我正在尝试 return 匹配字符串上的行值。
我从一个没有 header 详细信息的 csv 开始。将csv加载到内存后,我想我需要先添加header然后将数据转换为json,然后循环遍历数据以在数组中找到正确的object。
我已经使用 highland 创建了一个读取流并输出到 objects。但是,换行符 \r
和 \r\n
没有被解析出来,而是被注入到值字符串中。
这种方法似乎也没有解析整个文件,它输出了 3 行。
highland(fs.createReadStream('example.csv', 'utf8'))
.map(line => line.split(','))
.map(parts => ({
a: parts[0],
b: parts[1],
c: parts[2]
}))
.each(x => console.log(x))
最好将 CSV 结构化为 JSON,然后使用 .filter()
方法匹配记录。
实际输出1000+行文件
{ a: '', b: 'CD53110' }
{ a: '\nRD40115', b: 'CD40315' }
{ a: '', b: '63\r\nRE15468' }
{ a: '96798', b: '5\r\nRR60899' }
示例输入片段
,CD510,13
,T9069,65
RCM22,TC633,101
RC023,87693,16
M2024,T7636,109
注意:前几行仅包含 'b' 和 'c' 列。
您可以将 headers 写成字符串,将 csv 设置到内存中,然后将两者连接起来。
然后使用 csvtojson
模块,您可以将 csv
映射到 json
并使用本机过滤器函数 return 匹配行。
const fs = require('fs')
const csv = require('csvtojson')
let headers = 'a,b,c\n'
let file = fs.readFileSync(__dirname + 'example.csv', 'utf8')
let strToMatch = 'def123'
let c = headers + file
csv().fromString(c)
.then((json) => {
let arr = json.filter(el => el.a == strToMatch)
res.json({
a: arr[0]['a'],
b: arr[0]['b'],
c: arr[0]['c']
})
})
我正在尝试 return 匹配字符串上的行值。
我从一个没有 header 详细信息的 csv 开始。将csv加载到内存后,我想我需要先添加header然后将数据转换为json,然后循环遍历数据以在数组中找到正确的object。
我已经使用 highland 创建了一个读取流并输出到 objects。但是,换行符 \r
和 \r\n
没有被解析出来,而是被注入到值字符串中。
这种方法似乎也没有解析整个文件,它输出了 3 行。
highland(fs.createReadStream('example.csv', 'utf8'))
.map(line => line.split(','))
.map(parts => ({
a: parts[0],
b: parts[1],
c: parts[2]
}))
.each(x => console.log(x))
最好将 CSV 结构化为 JSON,然后使用 .filter()
方法匹配记录。
实际输出1000+行文件
{ a: '', b: 'CD53110' }
{ a: '\nRD40115', b: 'CD40315' }
{ a: '', b: '63\r\nRE15468' }
{ a: '96798', b: '5\r\nRR60899' }
示例输入片段
,CD510,13
,T9069,65
RCM22,TC633,101
RC023,87693,16
M2024,T7636,109
注意:前几行仅包含 'b' 和 'c' 列。
您可以将 headers 写成字符串,将 csv 设置到内存中,然后将两者连接起来。
然后使用 csvtojson
模块,您可以将 csv
映射到 json
并使用本机过滤器函数 return 匹配行。
const fs = require('fs')
const csv = require('csvtojson')
let headers = 'a,b,c\n'
let file = fs.readFileSync(__dirname + 'example.csv', 'utf8')
let strToMatch = 'def123'
let c = headers + file
csv().fromString(c)
.then((json) => {
let arr = json.filter(el => el.a == strToMatch)
res.json({
a: arr[0]['a'],
b: arr[0]['b'],
c: arr[0]['c']
})
})