分隔文本文件(文件名是数据)=>
01 - Rental Details Rental ID,01 - Rental Details Local Start Time,01 - Rental Details Local End Time,01 - Rental Details Bike ID,01 - Rental Details Duration In Seconds Uncapped,03 - Rental Start Station ID,03 - Rental Start Station Name,02 - Rental End Station ID,02 - Rental End Station Name,User Type,Member Gender,05 - Member Details Member Birthday Year
22178529,2019-04-01 00:02:22,2019-04-01 00:09:48,6251,446.0,81,Daley Center Plaza,56,Desplaines St & Kinzie St,,Male,1975
22178530,2019-04-01 00:03:02,2019-04-01 00:20:30,6226,"1,048.0",317,Wood St & Taylor St,59,Wabash Ave & Roosevelt Rd,Subscriber,Female,1984
已转换的JSON文件(文件名是data.JSON)
{
"01 - Rental Details Rental ID": "22178529",
"01 - Rental Details Local Start Time": "2019-04-01 00:02:22",
"01 - Rental Details Local End Time": "2019-04-01 00:09:48",
"01 - Rental Details Bike ID": "6251",
"01 - Rental Details Duration In Seconds Uncapped": "446.0",
"03 - Rental Start Station ID": "81",
"03 - Rental Start Station Name": "Daley Center Plaza",
"02 - Rental End Station ID": "56",
"02 - Rental End Station Name": "Desplaines St & Kinzie St",
"User Type": "Subscriber",
"Member Gender": "Male",
"05 - Member Details Member Birthday Year": "1975",
},
{
"01 - Rental Details Rental ID": "22178529",
"01 - Rental Details Local Start Time": "2019-04-01 00:02:22",
"01 - Rental Details Local End Time": "2019-04-01 00:09:48",
"01 - Rental Details Bike ID": "6251",
"01 - Rental Details Duration In Seconds Uncapped": "446.0",
"03 - Rental Start Station ID": "81",
"03 - Rental Start Station Name": "Daley Center Plaza",
"02 - Rental End Station ID": "56",
"02 - Rental End Station Name": "Desplaines St & Kinzie St",
"User Type": "Subscriber",
"Member Gender": "Male",
"05 - Member Details Member Birthday Year": "1975",
}
如果是简单的CSV格式,可能会有所帮助:
function convert(csv) {
const result = {};
const lines = csv.split('\n').map(line => line.split(','));
for (let i = 0; i < lines[0].length; i++) {
result[lines[0][i]] = lines[1][i];
}
return result;
}
PS。假设有精确的2行(标题和值),则每行内的值以逗号分隔。
提供的输入似乎与提供的输出不匹配。但是我认为这是您所需要的。
function convert(text){
const lines = text.split('\n');
const keys = lines.shift().split(',');
const results = [];
for (const line of lines) {
const values = line.match(/".*"|[^,"]+/g);
const result = {};
for (let i = 0; i < keys.length; i++) {
result[keys[i]] = values[i];
}
results.push(result);
}
return results;
}
在换行符上分割行匹配带引号的字符串,普通字符串,逗号或无字符串(空白)将标题的第一行拼接为键
将行映射到对象图
text = `01 - Rental Details Rental ID,01 - Rental Details Local Start Time,01 - Rental Details Local End Time,01 - Rental Details Bike ID,01 - Rental Details Duration In Seconds Uncapped,03 - Rental Start Station ID,03 - Rental Start Station Name,02 - Rental End Station ID,02 - Rental End Station Name,User Type,Member Gender,05 - Member Details Member Birthday Year
22178529,2019-04-01 00:02:22,2019-04-01 00:09:48,6251,446.0,81,Daley Center Plaza,56,Desplaines St & Kinzie St,,Male,1975
22178530,2019-04-01 00:03:02,2019-04-01 00:20:30,6226,"1,048.0",317,Wood St & Taylor St,59,Wabash Ave & Roosevelt Rd,Subscriber,Female,1984`
const rows = text.split(/\r?\n/g)
.map(x =>
[...x.matchAll(/(?:"([^"]+?)"|([^,]+?)|(,))(?=,|$)/g)]
.map(([,quoted,x,])=>quoted||x||'')) //extract string or blank
const keys = rows.shift() //extract first row of keys
console.log(
rows.map(row=>Object.fromEntries(
row.map((v,i)=>[keys[i],v])
))
)