そのため、MongoDB ダンプから膨大な量の .bson があります。コマンドラインでbsondumpを使用して、出力を stdin として python にパイプします。これは BSON から 'JSON' に正常に変換されますが、実際には文字列であり、正当な JSON ではないようです。
たとえば、着信行は次のようになります。
{ "_id" : ObjectId( "4d9b642b832a4c4fb2000000" ),
"acted_at" : Date( 1302014955933 ),
"created_at" : Date( 1302014955933 ),
"updated_at" : Date( 1302014955933 ),
"_platform_id" : 3,
"guid" : 72106535190265857 }
私が信じているのはMongo Extended JSONです。
そのような行を読んで実行すると:
json_line = json.dumps(line)
私は得る:
"{ \"_id\" : ObjectId( \"4d9b642b832a4c4fb2000000\" ),
\"acted_at\" : Date( 1302014955933 ),
\"created_at\" : Date( 1302014955933 ),
\"updated_at\" : Date( 1302014955933 ),
\"_platform_id\" : 3,
\"guid\" : 72106535190265857 }\n"
まだ<type 'str'>
です。
私も試してみました
json_line = json.dumps(line, default=json_util.default)
(pymongo json_util - spam detection prevent a third link を参照) 上記のダンプと同じように出力されるようです。ロードするとエラーが発生します:
json_line = json.loads(line, object_hook=json_util.object_hook)
ValueError: No JSON object could be decoded
では、TenGen JSON の文字列を解析可能な JSON に変換するにはどうすればよいでしょうか? (最終的な目標は、タブで区切られたデータを別のデータベースにストリーミングすることです)