mongodb: “invalid character ‘,’ looking for beginning of value”

NO IMAGE
1 Star2 Stars3 Stars4 Stars5 Stars 給文章打分!
Loading...

從群裡獲取了一個超大的json(也就800M),需要匯入mongodb,然後遇到了一個問題:

$ mongoimport --db weibo --collection data --file test.json
2018-05-09T16:10:22.357 0800    connected to: localhost
2018-05-09T16:10:22.360 0800    Failed: error processing document #2: invalid character ',' looking for beginning of value
2018-05-09T16:10:22.360 0800    imported 0 documents

first

一開始,我先去 菜鳥工具1驗證了一下我的json格式不是不是正確,json格式是沒有沒問題的。

second

我以為是編碼的問題,可能是mac下的編碼有問題,因為stackoverflow2有一個談論這個問題的。上邊的回覆說是有UTF8不支援的字元,但是他們遇到的問題都是\\

嗯,還是這個問題,所以我這個問題應該跟JP的那個也不一樣。而且我這個應該是第一個json就出問題了!

插曲

因為檔案裡好多東西都沒用,所以我想只把有用的那幾行挑出來,但是結果感人,還是想個正經辦法把。
附上 cat

third

最後,在我一次又一次的實驗下,終於找到了問題:

{
...
},
{
...
},
...

泥煤兩個json中間多了一個逗號啊,然後寫了一個指令碼把這個逗號去掉吧。。。

import os
import re
import sys
args = sys.argv
if len(args) != 3 or args[1] == args[2]:
raise Warning()
abs_path = os.path.abspath('.')
org_path = os.path.join(abs_path, args[1])
new_path = os.path.join(abs_path, args[2])
re_com = re.compile(r'^},')
try:
fr = open(org_path, 'r')
fw = open(new_path, 'w')
for line in fr:
if re_com.match(line):
line = '}\n'
fw.writelines(line)
except IOError as e:
print(e)
finally:
if fr:
fr.close()
if fw:
fw.close()

這麼pythonic的處理大檔案的方式來自:https://www.cnblogs.com/wulaa…

with open(filename, 'r') as file:
for line in file:
....

ok,把新檔案匯入進去~

$ mongoimport --db weibo --collection data --file new.json
2018-05-09T15:58:36.211 0800    connected to: localhost
2018-05-09T15:58:39.194 0800    [##......................] weibo.data77.5MB/785MB (9.9%)
2018-05-09T15:58:42.195 0800    [####....................] weibo.data160MB/785MB (20.4%)
2018-05-09T15:58:45.195 0800    [#######.................] weibo.data243MB/785MB (31.0%)
2018-05-09T15:58:48.203 0800    [#########...............] weibo.data323MB/785MB (41.1%)
2018-05-09T15:58:51.197 0800    [############............] weibo.data402MB/785MB (51.2%)
2018-05-09T15:58:54.195 0800    [##############..........] weibo.data478MB/785MB (60.9%)
2018-05-09T15:58:57.196 0800    [#################.......] weibo.data560MB/785MB (71.4%)
2018-05-09T15:59:00.195 0800    [###################.....] weibo.data642MB/785MB (81.8%)
2018-05-09T15:59:03.196 0800    [######################..] weibo.data722MB/785MB (92.0%)
2018-05-09T15:59:05.521 0800    [########################] weibo.data785MB/785MB (100.0%)
2018-05-09T15:59:05.522 0800    imported 95208 documents

Bingo!


這裡有兩篇討論這個問題的,我沒來得及看,留給有需要的人(好吧,主要是看著太吃力了):

https://stackoverflow.com/que…
https://groups.google.com/for…


https://c.runoob.com/front-en…

https://stackoverflow.com/que…

http://www.cnblogs.com/peida/…

相關文章

伺服器 最新文章