jsonの変換
jsonは便利だけどオブジェクトについては
文字列に変換しろやこらって怒られる。その対処。
import json from bson.objectid import ObjectId #<-pymongoに含まれる from bson import json_util #<-pymongoに含まれる from datetime import datetime class mongoEncoder(json.JSONEncoder): def default(self, obj): #_idはObjectId型で、JSONではSerializeできない。よって変換する if isinstance(obj, ObjectId): return json_util.default(obj) elif isinstance(obj, datetime): return obj.strftime("%Y-%m-%d %H:%M:%S") else: return obj return json.JSONEncoder.default(self, obj)
ダンプする時に上を参照する。
data = db.find() # いろいろ省略 ret = [eval(json.dumps(d, ensure_ascii=False, cls=mongoEncoder)) for d in data]
Cursor型のdataを1件づつdにつっこんで、dumpしつつ配列にする。
その時ObjectIdとdatetimeを意味のある文字列にする。みたいなコード。