mongoimport无法导入JSON数据

时间:2015-09-07 08:22:45

标签: json mongodb mongoimport

我正在尝试按照本文http://zaiste.net/2012/08/importing_json_into_mongodb/中的步骤将名为breedData.json的文件导入mongodb。

所以我在app的根文件夹中输入以下命令。 breedData.json文件也位于app根文件夹中。 Mongod和nodemon正在运行。

#!/usr/bin/perl

use strict;
use warnings;
use Cwd;

my $dir = getcwd;
my $count = 0;

opendir(my $dh, $dir) or die "$0: $dir: $!\n";
while (my $file = readdir($dh)) {
     # We only want files
     next unless (-f "$dir/$file");
     # Use a regular expression to find files ending in .txt
     next unless ($file =~ m/\.html$/);

     print "$file\n";
     $count = $count + 1;
 }
 closedir($dh);
 print "There are $count files in this directory.";
 exit 0;

我得到了这个:

mongoimport --db shelterdoggie --collection breeds --type json --file breedData.json --jsonArray

我用jsonlint.com检查了我的文件,它是有效的json。

我已尝试将此json格式与上述终端命令一起使用:

2015-09-07T00:58:18.646-0700    connected to: localhost
2015-09-07T00:58:18.647-0700    Failed: error reading separator after document #2: bad JSON array format - found '{' outside JSON object/array in input source
2015-09-07T00:58:18.647-0700    imported 0 documents

我也尝试过这种格式,同时在上面的命令中省略了--jsonArray标志:

[
{"malehw":"Ht: 9-11.5, Wt: 7-9","femalehw":"Ht: 9-11.5, Wt: 7-9"},
{"malehw":"Ht: 27, Wt: 60","femalehw":"Ht: 25, Wt: 50"},
{"malehw":"Ht: 23, Wt: 45","femalehw":"Ht: <23, Wt: 45"}
]

然后我收到了这个错误:

{"malehw":"Ht: 9-11.5, Wt: 7-9","femalehw":"Ht: 9-11.5, Wt: 7-9"}
{"malehw":"Ht: 27, Wt: 60","femalehw":"Ht: 25, Wt: 50"}
{"malehw":"Ht: 23, Wt: 45","femalehw":"Ht: <23, Wt: 45"}

我已经检查了文件,有152个{和s}和152}我的文件中有152行/文件,所以它不应该是因为某个地方有一个未闭合的花括号。我不明白为什么这不起作用。如果您有任何建议,我会很感激。

这是我的.json文件中的一个完整行,以防它有用:

2015-09-07T01:11:00.034-0700    connected to: localhost
2015-09-07T01:11:00.035-0700    Failed: error processing document #1: invalid character '{' after array element
2015-09-07T01:11:00.035-0700    imported 0 documents

2 个答案:

答案 0 :(得分:3)

克莱门特的建议让我走上正轨。放置文件的完整文件路径。终端中的导入命令如下所示:

mongoimport --db shelterdoggie --collection breeds --type json --file ~/dev/shelter_doggie/breedData.json --jsonArray

至于我的csv导入尝试,我在db之前只有一个破折号而不是两个破折号。我修复了它并添加了csv文件的完整文件路径。所以当我运行这样的命令时它会起作用:

mongoimport --db shelterdoggie --collection breeds --type csv --file ~/dev/shelter_doggie/kimonoData.csv --headerline

不确定是否有其他方法可以在没有完整文件路径的情况下执行此操作(正如我的初始问题中的文章所示),但至少我可以导入我的数据。

答案 1 :(得分:1)

在Windows上有类似的问题,因此通过stdin示例

传递数据来修复它
cat "PATH\breedData.json" | mongoimport.exe --db shelterdoggie --collection breeds --type json --file --jsonArray

或在Linux上

mongoimport --db shelterdoggie --collection breeds --type json --file --jsonArray < breedData.json