Csv

CSV 到嵌套 JSON

  • June 21, 2019

我需要將 CSV 文件轉換為 JSON 輸出,我正在使用來自https://www.npmjs.com/package/csvtojson的 csvtojason 庫,csv 文件:

模式,設備,機頂盒,數據,data1,data2,data3,data4
模型 1,設備 1,機頂盒 1,數據 1,數據 2,數據 3,數據 4
模型 1,設備 2,機頂盒 1,數據 1,數據 2,數據 3,數據 4
模型 2,設備 1,機頂盒 1,數據 1,數據 2,數據 3,數據 4
模型 2,設備 1,機頂盒 2,數據 1,數據 2,數據 3,數據 4
模型 2,設備 2,機頂盒 1,數據 1,數據 2,數據 3,數據 4
模型 2,設備 2,機頂盒 2,數據 1,數據 2,數據 3,數據 4
模型 2,設備 2,機頂盒 3,數據 1,數據 2,數據 3,數據 4

用於轉換 json 的程式碼

csv = 要求('csvtojson')
csvFilePath = './CSVFile.csv'
csv()
.fromFile(csvFilePath)
.then((jsonObj) => {
控制台日誌(jsonObj)
res.send(jsonObj);
})

但輸出與我的預期相差甚遠:

[ {模式:'model1',
設備:“設備1”,
等:'etc1',
數據:“數據1”,
數據1:'數據2',
數據2:'數據3',
數據3:“數據4”},
{模式:'model1',
設備:“設備2”,
等:'etc1',
數據:“數據1”,
數據1:'數據2',
數據2:'數據3',
數據3:“數據4”},
{模式:'modelo2',
設備:“設備1”,
等:'etc1',
數據:“數據1”,
數據1:'數據2',
數據2:'數據3',
數據3:“數據4”},
{模式:'modelo2',
設備:“設備1”,
等:'etc2',
數據:“數據1”,
數據1:'數據2',
數據2:'數據3',
數據3:“數據4”},
{模式:'modelo2',
設備:“設備2”,
等:'etc1',
數據:“數據1”,
數據1:'數據2',
數據2:'數據3',
數據3:“數據4”},
{模式:'modelo2',
設備:“設備2”,
等:'etc2',
數據:“數據1”,
數據1:'數據2',
數據2:'數據3',
數據3:“數據4”},
{模式:'modelo2',
設備:“設備2”,
等:'etc3',
數據:“數據1”,
數據1:'數據2',
數據2:'數據3',
數據3:“數據4”}]

我期待得到這樣的東西:

[{
模型1:{
設備1:{
stb1:[數據:'data1',data2:'data2',data3:'data3',data4:'data4']
}
設備2:{
stb1:[數據:'data1',data2:'data2',data3:'data3',data4:'data4']
}
}
模型2:{
設備1:{
stb1:[數據:'data1',data2:'data2',data3:'data3',data4:'data4']
stb2:[數據:'data1',data2:'data2',data3:'data3',data4:'data4']
}
設備2:{
stb1:[數據:'data1',data2:'data2',data3:'data3',data4:'data4']
stb2:[數據:'data1',data2:'data2',data3:'data3',data4:'data4']
stb3:[數據:'data1',data2:'data2',data3:'data3',data4:'data4']
}
}
}]

有什麼簡單的方法可以做到嗎?

我找到了答案,使用 D3 庫非常容易

https://d3js.org/d3-collection.v1.min.js

在我的 .js 文件上:

           var groupedJson = d3.nest()
               .key(function (d) { return d.model; })
               .key(function (d) { return d.device; })
               .key(function (d) { return d.stb; })
               .entries(json);
           console.log(groupedJson);

引用自:https://unix.stackexchange.com/questions/525872