Wie kann ich mit Python den bsondump von MongoDB in JSON umwandeln?
So, ich habe eine enorme Menge .bson aus einer MongoDB-dump. Ich bin mit bsondump auf der Befehlszeile umleiten der Ausgabe als stdin zu python. Diese erfolgreich konvertiert von BSON 'JSON', aber es ist in der Tat ein string, und scheinbar nicht legal JSON.
Beispielsweise eine eingehende Zeile sieht wie folgt aus:
{ "_id" : ObjectId( "4d9b642b832a4c4fb2000000" ),
"acted_at" : Date( 1302014955933 ),
"created_at" : Date( 1302014955933 ),
"updated_at" : Date( 1302014955933 ),
"_platform_id" : 3,
"guid" : 72106535190265857 }
Die ich glauben, ist Mongo Erweiterte JSON.
Wenn ich lese in einer Zeile und tun:
json_line = json.dumps(line)
Bekomme ich:
"{ \"_id\" : ObjectId( \"4d9b642b832a4c4fb2000000\" ),
\"acted_at\" : Date( 1302014955933 ),
\"created_at\" : Date( 1302014955933 ),
\"updated_at\" : Date( 1302014955933 ),
\"_platform_id\" : 3,
\"guid\" : 72106535190265857 }\n"
Ist noch <type 'str'>
.
Habe ich auch schon versucht
json_line = json.dumps(line, default=json_util.default)
(siehe pymongo json_util - spam-Erkennung verhindert, dass ein Dritter link )
Das scheint die Ausgabe die gleiche wie Bohnenstroh oben. Lasten gibt einen Fehler:
json_line = json.loads(line, object_hook=json_util.object_hook)
ValueError: No JSON object could be decoded
So, wie kann ich mich verwandeln den string von TenGen JSON in parseable JSON?
(das Endziel ist stream tab-getrennte Daten in eine andere Datenbank)
InformationsquelleAutor der Frage Peter Nachbaur | 2012-08-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie haben, ist ein dump-in Mongo Erweiterte JSON in TenGen-Modus (siehe hier). Einige mögliche Wege zu gehen:
Wenn Sie können dump wieder, den Strikten output-Modus durch das MongoDB-REST-API. Das sollte Ihnen real JSON anstelle von dem, was Sie jetzt haben.
Verwenden
bson
aus http://pypi.python.org/pypi/bson/ zu Lesen, die BSON, die Sie bereits in Python-Datenstrukturen und dann tun, was die Verarbeitung, die Sie brauchen, auf diejenigen, die (möglicherweise Ausgabe JSON).Verwendung der MongoDB Python-Bindungen für die Verbindung zur Datenbank, um die Daten in Python, und dann tun, was die Verarbeitung, die Sie benötigen. (Falls nötig, könnte man die Einrichtung eines lokalen MongoDB-Instanz und importieren Sie Ihre gedumpten Dateien in.)
Konvertieren der Mongo Erweiterte JSON aus TenGen-Modus auf den Strikten Modus. Sie könnte eine separate filter, um es zu tun (von stdin Lesen, ersetzen TenGen Strukturen mit Strengen Strukturen, und die Ausgabe auf stdout) oder Sie tun konnte, als er Sie verarbeiten die Eingabe.
Hier ist ein Beispiel für die Verwendung von Python und regular expressions:
Je nach Ihrem Ziel, einer von diesen sollte ein angemessener Ausgangspunkt.
InformationsquelleAutor der Antwort Fabian Fagerholm
laden eines kompletten bson-Dokument in python-Speicher ist teuer.
Wenn Sie möchten, übertragen Sie Sie eher als das laden der gesamten Datei und tun, eine Last, können Sie versuchen, diese Bibliothek.
https://github.com/bauman/python-bson-streaming
InformationsquelleAutor der Antwort bauman.space
Können Sie konvertieren Linien des bson-Datei wie folgt:
Jeder valid_dict element wird ein Gültiger python-dict, die Sie konvertieren können, um json.
InformationsquelleAutor der Antwort Emily S