CSV Mongoimport 在非引用字段中抛出 "

CSV Mongoimport throws bare " in non quoted fields

如果该属性的值为空,我有一个包含 ["] 的 csv 文件。例如:

a,b,c
1,2,3
4,[""],6
7,8,9

我有两个 Mongo 版本不同的 RHEL 系统:2.4.1 和 3.4 当我 运行 这个命令时:

time mongoimport --host hostname:27017 --db test --collection abc --file example.csv --type csv

这会在 3.4 版中引发错误:

 bare " in non-quoted-field

虽然它在 2.4.1 中工作正常!!!我需要它在 3.4 上工作。谁能提出解决方案?我的 CSV 文件很大,我不想更改数据。

MongoImport 3.4 documentation 说:

The csv parser accepts that data that complies with RFC RFC 4180. As a result, backslashes are not a valid escape character. If you use double-quotes to enclose fields in the CSV data, you must escape internal double-quote marks by prepending another double-quote.

因此,在您的情况下,即 [""],它认为第一个引号是转义字符,因此它只剩下一个 " 并且因此失败。要转义双引号,可以像 [""""] 一样使用它。这里每个双引号转义下一个双引号

要解决此问题,您有以下两种选择:

  1. 在 MS Excel 中打开此 csv。它将正确地重新格式化整个文件。
  2. 如果[""]只是表示一个空字段,你可以直接用一个空字符串替换这个模式。 Mongoimport 不会为相应文档中的空值创建字段。

编辑:

正如所讨论的,它用于表示一个空值,那么你可以像

这样使用 sed 完全替换这个字符串
sed 's/\[""\]//g' FILE-NAME

我通过以 xlsx 格式打开它并稍后以 csv 格式再次保存它来解决它。这是因为excel 更正了格式。