[英]Convert csv to object key value pair using js
我正在嘗試將 CSV 數據轉換為鍵值對數組。 我有一個像下面這樣的 CSV,請看一下。
Attrname1,AttrValue1,AttrUnit1,Flag1,Attrname2,AttrValue2,AttrUnit2,Flag2,Attrname3,AttrValue3,AttrUnit3,Flag3,Attrname4,AttrValue4,AttrUnit4,Flag4,Attrname5,AttrValue5,AttrUnit5,Flag5
Type,"LTPS IPS LCD",DISPLAY,DISPLAY,Size,"6.3 inches, 99.1 cm2 ",DISPLAY,DISPLAY,Resolution,"1080 x 2280 pixels, 19:9 ratio ",DISPLAY Model,DISPLAY Model,Type,"LTPS IPS, 16M colors",Ram,DISPLAY Model,Size,"6.3 inches, 99.1 cm2 (~82.5% screen-to-body ratio)",DISPLAY Model,DISPLAY Model
我的預期輸出
{
"Display":{
"Type":"LTPS IPS LCD",
"Size":"6.3 inches, 99.1 cm2 ",
"Resolution":"1080 x 2280 pixels, 19:9 ratio "
},
"DISPLAY Model":{
"Type":"LTPS IPS, 16M colors",
"Size":"6.3 inches, 99.1 cm2 (~82.5% screen-to-body ratio)",
}
}
Attrname 是關鍵,AttrValue 是這里的價值。 其中需要按 Flag 或 AttrUnit 分組。
我的代碼如下。
var http = require('http');
var express = require('express');
var port = process.env.PORT || 8089;
var app = express();
var appRoutes = require('./routes/appRoutes');
var bodyParser = require('body-parser');
var cors = require('cors');
app.use(express.static('public'));
app.use(cors());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use('/', appRoutes);
http.createServer(app).listen(port);
const csvFilePath = 'test.csv'
const csv = require('csvtojson')
var jsonToCSV = require('json-to-csv');
const { json } = require('body-parser');
const fileName = 'save-html2.csv';
let data = [];
csv()
.fromFile(csvFilePath)
.then((jsonObjj) => {
// console.log(jsonObj);
jsonObjj.forEach((jsonObj, jsonObj_index) => {
Object.keys(jsonObj).forEach((objs, objs_index) => {
if (jsonObj['Flag' + objs_index] == jsonObj['AttrUnit' + objs_index]) {
if (jsonObj['Attrname' + objs_index] != undefined) {
// data[jsonObj['AttrUnit'+objs_index]] = data[jsonObj['AttrValue'+objs_index]]
let heading = jsonObj['AttrUnit' + objs_index];
let key = [jsonObj['Attrname' + objs_index]];
let value = [jsonObj['AttrValue' + objs_index]];
data.push({
[heading]: {
[key]: JSON.stringify(value)
}
})
}
}
})
})
console.log(data)
})
我的實際輸出
[
{ DISPLAY: { Type: '["LTPS IPS LCD"]' } },
{ DISPLAY: { Size: '["6.3 inches, 99.1 cm2"]' } },
{
'DISPLAY Model': { Resolution: '["1080 x 2280 pixels, 19:9 ratio"]' }
},
{
'DISPLAY Model': { Size: '["6.3 inches, 99.1 cm2 (~82.5% screen-to-body ratio)"]' }
}
]
郵件密鑰未在此處分組,我無法合並它。
帶有data.push
每個key
data.push
可以在數組中創建新項目。 這就是項目不按標題分組的原因。 將data = []
從數組更改為對象: data = {}
。 並使用而不是 data.push 這個:
const newData = data[heading] ?? {};
newData[key] = JSON.stringify(value);
data[heading] = newData;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.