当字段中可能包含逗号和引号时,从CSV转换为JSON的最佳方法是什么?

罗兰多

我希望能够将CSV转换为JSON。csv是这样的自由文本(带有换行符):

name,age,booktitle
John,2,Hello World
Mary,3,""Alas, What Can I do?""
Joseph,5,"Waiting, waiting, waiting"

可以告诉我的问题是文件...

  • 在某些领域中有一些内部逗号,尽管它们用至少一个双引号引起来。
  • 文件中可能有双引号。

我希望输出在每个字段中都没有任何引号和结尾引号...如何正确创建一个从从CSV字符串中解析出来的JSON对象,该字符串准确地表示了CSV?(不包括前导和尾随引号)。

我通常使用:

var mycsvstring;
var finalconvertedjson = {};
var headerfields = // get headers here
var lines = mycsvstring.split('\n');


for(var i = 0; i < lines.length; i++) {
// loop through each line and set a key for each header field that corresponds to the appropriate lines[i]    
}
马修·e·布朗

我的第一个猜测是使用正则表达式。您可以尝试我刚刚讲过的这一项(regex101链接):

/(?:[\t ]?)+("+)?(.*?)\1(?:[\t ]?)+(?:,|$)/gm

这可用于提取字段。因此,您也可以使用它来获取标题。第一个捕获组用作带有反向引用的可选quote-grabber,因此实际数据在中matchAll(regex)[2]在所有情况下,都使用过滤器来截断最后一个匹配项,因为允许空白字段(f1,,f3)在末尾添加零宽度匹配项。使用JavaScript而不是使用正则表达式更容易摆脱这种情况。

const csvToJson = (str, headerList, quotechar = '"', delimiter = ',') => {
  const cutlast = (_, i, a) => i < a.length - 1;
  // const regex = /(?:[\t ]?)+("+)?(.*?)\1(?:[\t ]?)+(?:,|$)/gm; // no variable chars
  const regex = new RegExp(`(?:[\\t ]?)+(${quotechar}+)?(.*?)\\1(?:[\\t ]?)+(?:${delimiter}|$)`, 'gm');
  const lines = str.split('\n');
  const headers = headerList || lines.splice(0, 1)[0].match(regex).filter(cutlast);

  const list = [];

  for (const line of lines) {
    const val = {};
    for (const [i, m] of [...line.matchAll(regex)].filter(cutlast).entries()) {
      // Attempt to convert to Number if possible, also use null if blank
      val[headers[i]] = (m[2].length > 0) ? Number(m[2]) || m[2] : null;
    }
    list.push(val);
  }

  return list;
}

const testString = `name,age,booktitle
John,,Hello World
Mary,3,""Alas, What Can I do?""
Joseph,5,"Waiting, waiting, waiting"
"Donaldson Jones"   , six,    "Hello, friend!"`;

console.log(csvToJson(testString));
console.log(csvToJson(testString, ['foo', 'bar', 'baz']));

作为奖励,我编写此代码是为了允许传递字符串列表以用作标题,因为我直接知道并非所有CSV文件都具有这些字符串。


PS:如果您不喜欢我的正则表达式,则可以签出一个符合CSV标准的复杂得多的东西,而不仅仅是抓住一切。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

分隔包含逗号和双引号的csv文件的最佳方法是什么?

来自分类Dev

分隔包含逗号和双引号的csv文件的最佳方法是什么?

来自分类Dev

将包含多个变量的文本变量转换为R中的单独变量的最佳方法是什么?

来自分类Dev

将结果集转换为json的最佳方法是什么

来自分类Dev

将结构转换为Json的最佳方法是什么?

来自分类Dev

将结构转换为Json的最佳方法是什么?

来自分类Dev

将c#中的所有日期时间字段转换为已登录用户的时区的最佳方法是什么?

来自分类Dev

将LocalDate和LocalTime转换为java.util.date的最佳方法是什么?

来自分类Dev

在Angular 2打字稿中将JSON转换为通用Object []的最佳方法是什么?

来自分类Dev

将json字符串转换为对象数组的最佳方法是什么?

来自分类Dev

在Julia中将int转换为char的最佳方法是什么?

来自分类Dev

在Julia中将Int转换为String的最佳方法是什么?

来自分类Dev

将获胜机会转换为布尔的最佳方法是什么?

来自分类Dev

将对象转换为单独模型的最佳方法是什么

来自分类Dev

在Swift中将String转换为[Character]的最佳方法是什么?

来自分类Dev

将度数转换为象限名称的最佳方法是什么

来自分类Dev

将数字转换为相应单词的最佳方法是什么?

来自分类Dev

在Ruby或Rails中,将美国东部时间转换为UTC的最佳方法是什么?

来自分类Dev

在Python2.7中将列表转换为字典的最佳方法是什么

来自分类Dev

从不包含唯一 ID 或字段的数组创建具有 map 函数的列表时,在 React 中定义“KEY”的最佳方法是什么?

来自分类Dev

POI Java 将 xlsx 转换为 CSV 逗号和双引号

来自分类Dev

将PHP关联数组转换为仅包含值的字符串的最佳方法是什么?

来自分类Dev

将包含 JSON 的 Avro 文件转换为 Snowflake 上的表结构的正确方法是什么?

来自分类Dev

在javascript中将json的字段转换为数组的最快方法是什么?

来自分类Dev

在页面中包含CSS和JavaScript的最佳做法是什么?

来自分类Dev

当有两个可能包含详细信息的表时,选择数据的最佳方法是什么?

来自分类Dev

在 tsconfig 中显式包含类型的最佳方法是什么?

来自分类Dev

在Rust中将usize转换为f64时,要知道精度损失的最佳方法是什么?

来自分类Dev

在Rust中将usize转换为f64时,要知道精度损失的最佳方法是什么?

Related 相关文章

  1. 1

    分隔包含逗号和双引号的csv文件的最佳方法是什么?

  2. 2

    分隔包含逗号和双引号的csv文件的最佳方法是什么?

  3. 3

    将包含多个变量的文本变量转换为R中的单独变量的最佳方法是什么?

  4. 4

    将结果集转换为json的最佳方法是什么

  5. 5

    将结构转换为Json的最佳方法是什么?

  6. 6

    将结构转换为Json的最佳方法是什么?

  7. 7

    将c#中的所有日期时间字段转换为已登录用户的时区的最佳方法是什么?

  8. 8

    将LocalDate和LocalTime转换为java.util.date的最佳方法是什么?

  9. 9

    在Angular 2打字稿中将JSON转换为通用Object []的最佳方法是什么?

  10. 10

    将json字符串转换为对象数组的最佳方法是什么?

  11. 11

    在Julia中将int转换为char的最佳方法是什么?

  12. 12

    在Julia中将Int转换为String的最佳方法是什么?

  13. 13

    将获胜机会转换为布尔的最佳方法是什么?

  14. 14

    将对象转换为单独模型的最佳方法是什么

  15. 15

    在Swift中将String转换为[Character]的最佳方法是什么?

  16. 16

    将度数转换为象限名称的最佳方法是什么

  17. 17

    将数字转换为相应单词的最佳方法是什么?

  18. 18

    在Ruby或Rails中,将美国东部时间转换为UTC的最佳方法是什么?

  19. 19

    在Python2.7中将列表转换为字典的最佳方法是什么

  20. 20

    从不包含唯一 ID 或字段的数组创建具有 map 函数的列表时,在 React 中定义“KEY”的最佳方法是什么?

  21. 21

    POI Java 将 xlsx 转换为 CSV 逗号和双引号

  22. 22

    将PHP关联数组转换为仅包含值的字符串的最佳方法是什么?

  23. 23

    将包含 JSON 的 Avro 文件转换为 Snowflake 上的表结构的正确方法是什么?

  24. 24

    在javascript中将json的字段转换为数组的最快方法是什么?

  25. 25

    在页面中包含CSS和JavaScript的最佳做法是什么?

  26. 26

    当有两个可能包含详细信息的表时,选择数据的最佳方法是什么?

  27. 27

    在 tsconfig 中显式包含类型的最佳方法是什么?

  28. 28

    在Rust中将usize转换为f64时,要知道精度损失的最佳方法是什么?

  29. 29

    在Rust中将usize转换为f64时,要知道精度损失的最佳方法是什么?

热门标签

归档