簡體   English   中英

使用js將csv轉換為對象鍵值對

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM