我正在嘗試將 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)"]' }
}
]
郵件密鑰未在此處分組,我無法合并它。
uj5u.com熱心網友回復:
每個key與data.push您一起在陣列中創建新專案。這就是專案不按標題分組的原因。data = []從陣列更改為物件:data = {}。并使用而不是 data.push 這個:
// Try get current value of heading key. If there is nor such value, create new object.
const newData = data[heading] ?? {};
newData[key] = JSON.stringify(value);
data[heading] = newData;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/342680.html
標籤:javascript 节点.js 数组 json 目的
下一篇:無法將二維陣列傳遞給C 中的函式
