2015-01-26 64 views
1

我有這種格式的一些信息的JSON文件:如何將json文件加載到mongoDB中?

{ "_id" : ObjectId("xxx"), "date_time" : ISODate("2014-06-11T19:16:45Z"), "name" : "AAA", "phone_no" : "111", "address" : "BBB", "categories" : "CCC" } 
{ "_id" : ObjectId("yyy"), "date_time" : ISODate("2014-06-11T19:16:44Z"), "name" : "EEE", "phone_no" : "222", "address" : "FFF", "categories" : "GGG" } 
{ "_id" : ObjectId("zzz"), "date_time" : ISODate("2014-06-11T19:16:46Z"), "name" : "HHH", "phone_no" : "333", "address" : "III", "categories" : "JJJ" } 

我正在使用的代碼是這樣的:

db = pymongo.MongoClient().test 
path ='/home/files' 
for f in listdir(path): 
    filepath = path+'/'+f 
    data = []  
    for line in open(filepath): 
     try: 
      data.append(json.loads(line)) 
     except: 
      pass 
    db.temp.insert(data) 

這將導致一個錯誤,說明空批量寫是不可能的。基本上,json.loads(line)從來沒有工作。這是問題的JSON文件的格式?應該用其他方式聲明變量「數據」嗎?

如何這個文件加載到MongoDB的

+0

JSON犯規知道跆拳道的對象ID是或一個ISODate ...它只能處理簡單的類型......你可以嘗試用'yaml'加載數據如果你定義序列化規則對那些clases ...或者你可以只使用簡單的字符串行 – 2015-01-26 20:26:49

+2

你只是想挽回在JSON文件中的記錄來蒙戈?爲什麼不使用mongoimport? http://docs.mongodb.org/manual/reference/program/mongoimport/ – Tony 2015-01-26 21:06:24

回答

-2

JSON犯規知道是什麼的對象ID是或ISODate ...它只能處理簡單的類型......你可以嘗試,如果你有這些clases定義的序列化規則與YAML加載數據...或者你可以只需使用簡單的字符串即可。

for line in open(filepath): 
    line = re.sub("[a-zA-Z_]+\(([^)]+)\)","\\1",line) 
    print json.loads(line) 
    ... #do your thing 

這將消除類調用 轉換

{ "_id" : ObjectId("xxx"), "date_time" : ISODate("2014-06-11T19:16:45Z"), "name" : "AAA", "phone_no" : "111", "address" : "BBB", "categories" : "CCC" } 

{ "_id":"xxx", "date_time" : "2014-06-11T19:16:45Z", "name" : "AAA", "phone_no" : "111", "address" : "BBB", "categories" : "CCC" } 

您應該然後能夠使用JSON加載