来自 Excel 的 .json 数据

问题描述 投票:0回答:1

作为一名非程序员,经过在互联网上的一些搜索,我还没有找到以下挑战的解决方案。

初始状态:我有一个 Excel 文件,其结构与所附图像“原始数据”相同,但只有 5000 多行。

目标状态:我想要一个具有如下结构的 .json

{
    "Berlin": {
        "1-Personen-Haushalt": {
            "1 Zimmer": [
                "20 qm",
                "30 qm",
                "40 qm",
                "50 qm",
                "60 qm",
                "70 qm"
            ],
            "2 Zimmer": [
                "20 qm",
                "30 qm",
                "40 qm",
                "50 qm",
                "60 qm",
                "70 qm"
            ]
        },

等等

它应该作为组合框的基础。第一个的选择应该定义第二个的选择选项。第二个的选择应该定义第三个的选择选项。等等

它并不像我的示例中那么简单,因此并不总是“20 qm”或“2 Zimmer”。我的意思是真实的图案。

我已经对数据进行了一些格式化,希望这样会更容易。请参阅“格式化数据”

我已经尝试在 Visual Studio Code 中将格式化数据插入到 .json 中,但没有得到所需的结果。

也许您知道如何解决这个问题:)

Raw Data Formatted Data

json combobox transform xlsx
1个回答
0
投票

我的建议是你首先将 xlsx 文件转换为 csv,然后用 papaparse 解析它,然后使用某种函数来获得你想要的。

Papaparse 部分:

let data;
const csv = fs.readFileSync('example.csv', 'utf8');

Papa.parse(csv, {
  complete: (results) => {
    results.data.pop();
    data = results.data;
  }
});

格式化程序来获取您想要的json文件:

function formatter(data) {
  let result = {};
  data.forEach((item) => {
    let [city, person, room, size] = item;
    if (!result[city]) {
      result[city] = {};
    }
    if (!result[city][person]) {
      result[city][person] = {};
    }
    if (!result[city][person][room]) {
      result[city][person][room] = [];
    }
    result[city][person][room].push(size);
  });
  return result;
}

您可以将结果保存为 json:

let result = formatter(data);
fs.writeFileSync('result.json', JSON.stringify(result, null, 2));
© www.soinside.com 2019 - 2024. All rights reserved.