【问题标题】:Converting CSV to JSON where some JSON keys have multiple values将 CSV 转换为 JSON,其中一些 JSON 键具有多个值
【发布时间】:2018-10-17 06:28:35
【问题描述】:

我使用 excel 在 CSV 中输入数据。我想将 CSV 转换为如下所示的 JSON:

[
  {
    "Sr": 1,
    "Name": ["Steven ", " Smith "],
    "Age": 5
  },
  {
    "Sr": 2,
    "Name": ["Mark ", " Wood "],
    "Age": 2
  }
]

没有任何在线转换器以将键“名称”的值包含在方括号和用逗号分隔的双引号中的方式转换 CSV,如上例所示。

我尝试使用在线转换器将上述 JSON 转换为 CSV,以查看我应该如何在 CSV 中获取值。

原来是这样的:

Sr,Name,Age
1,"Steven , Smith ",5
2,"Mark , Wood ",2

现在再次将其转换为 JSON 会得到如下结果:

[
    {
        "Sr": "1",
        "Name": "Steven , Smith ",
        "Age": "5"
    },
    {
        "Sr": "2",
        "Name": "Mark , Wood ",
        "Age": "2"
    },
    {
        "Sr": ""
    }
]

如您所见,它与顶部的示例不同。这就是我需要将数据保存在 JSON 中的方式。任何帮助,将不胜感激。我只是想在 CSV 文件中输入数据并将其转换为 JSON,其数据类似于顶部的示例。

谢谢!

【问题讨论】:

  • 对于您的最后一个结果,是什么阻止您使用地图并为每个“名称”键创建一个数组?

标签: arrays json csv angular6


【解决方案1】:

您应该从逗号中选择另一个 CSV 分隔符(LibreOffice 和 MS Office 可以)。所以你的 CSV 就像: 高级;姓名;年龄 1;“史蒂文·史密斯”;5 2;“马克,木头”;2

将 CSV 解析为 json 有很多方法。 看看这样一个简单的函数

const parseCsv = async (url, delimiter) => {
  const file = await fetch(url);
  const text = await file.text();
  const [header, ...strings] = text.split("\n");
  const headers = header.replace(/\r$/, "").split(delimiter);
  const result = [];
  strings.reduce((jsonArray, stringLine) => {
    const line = {};
    stringLine
      .split(delimiter)
      .forEach(
        (cellData, idx) => (line[headers[idx]] = cellData.replace(/\r$/, ""))
      );
    jsonArray.push(line);
    return jsonArray;
  }, result);
  return result;
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 2020-09-08
    • 2019-09-08
    • 2019-11-01
    相关资源
    最近更新 更多