Я также сталкивался с тем же типом проблемы, когда мне приходится разбирать CSV-файл. Файл содержит адрес столбца, который содержит «,». После разбора этого CSV на JSON я получаю несогласованное отображение ключей при преобразовании его в файл JSON. Я использовал узел для разбора файла и библиотеки как baby parse и csvtojson Пример файла -
address,pincode
foo,baar , 123456
Пока я разбирался напрямую, не используя ребенка parse in JSON Я получал
[{
address: 'foo',
pincode: 'baar',
'field3': '123456'
}]
Итак, я написал код, который удаляет запятую (,) любым другим разделителем с каждым полем
/*
csvString(input) = "address, pincode\\nfoo, bar, 123456\\n"
output = "address, pincode\\nfoo {YOUR DELIMITER} bar, 123455\\n"
*/
const removeComma = function(csvString){
let delimiter = '|'
let Baby = require('babyparse')
let arrRow = Baby.parse(csvString).data;
/*
arrRow = [
[ 'address', 'pincode' ],
[ 'foo, bar', '123456']
]
*/
return arrRow.map((singleRow, index) => {
//the data will include
/*
singleRow = [ 'address', 'pincode' ]
*/
return singleRow.map(singleField => {
//for removing the comma in the feild
return singleField.split(',').join(delimiter)
})
}).reduce((acc, value, key) => {
acc = acc +(Array.isArray(value) ?
value.reduce((acc1, val)=> {
acc1 = acc1+ val + ','
return acc1
}, '') : '') + '\n';
return acc;
},'')
}
Возвращенная функция может быть передана в библиотеку csvtojson, и, следовательно, результат может быть использован.
const csv = require('csvtojson')
let csvString = "address, pincode\\nfoo, bar, 123456\\n"
let jsonArray = []
modifiedCsvString = removeComma(csvString)
csv()
.fromString(modifiedCsvString)
.on('json', json => jsonArray.push(json))
.on('end', () => {
/* do any thing with the json Array */
})
Теперь вы можете получить выход как
[{
address: 'foo, bar',
pincode: 123456
}]