将CSV转换为JSON,其中某些JSON密钥具有多个值

时间:2018-10-17 06:28:36

标签: arrays json csv angular6

我使用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,其数据类似于顶部的示例。

谢谢!

1 个答案:

答案 0 :(得分:0)

您应该从逗号中选择另一个CSV分隔符(LibreOffice和MS Office可以使用)。因此,您的CSV如下所示: 高级;姓名;年龄 1;“史蒂芬·史密斯”; 5 2;“ Mark,Wood”; 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;
};