Comment puis-je utiliser Python pour transformer de MongoDB bsondump en JSON?

J'ai donc une énorme quantité de .bfils à partir d'un MongoDB dump. Je suis à l'aide de bsondump sur la ligne de commande, de la tuyauterie de la sortie comme stdin pour python. Ce succès se convertit en BFILS à 'JSON', mais c'est en fait une chaîne de caractères, et ne semble pas légale JSON.

Par exemple une ligne entrante ressemble à ceci:

{ "_id" : ObjectId( "4d9b642b832a4c4fb2000000" ),
  "acted_at" : Date( 1302014955933 ),
  "created_at" : Date( 1302014955933 ),
  "updated_at" : Date( 1302014955933 ),
  "_platform_id" : 3,
  "guid" : 72106535190265857 }

Qui je pense est Mongo Étendu JSON.

Quand j'ai lu dans une de ces lignes et à faire:

json_line = json.dumps(line)

J'obtiens:

"{ \"_id\" : ObjectId( \"4d9b642b832a4c4fb2000000\" ),
\"acted_at\" : Date( 1302014955933 ),
\"created_at\" : Date( 1302014955933 ),
\"updated_at\" : Date( 1302014955933 ),
\"_platform_id\" : 3,
\"guid\" : 72106535190265857 }\n"

Qui est encore <type 'str'>.

J'ai aussi essayé de

json_line = json.dumps(line, default=json_util.default)

(voir pymongo json_util - détection de spam empêche un troisième lien )
Qui semble sortie le même que dumps ci-dessus. charges donne une erreur:

json_line = json.loads(line, object_hook=json_util.object_hook)
ValueError: No JSON object could be decoded

Alors, comment puis-je transformer la chaîne de TenGen JSON dans parseable JSON?
(le but final est de l'onglet flux de données séparées pour une autre base de données)

  • Avez-vous regardé bson? pypi.python.org/pypi/bson/0.3.2
  • Ne rien faire d'autre que de supprimer un Mongo dépendance? Je ne comprends pas comment cela pourrait être mon problème, mais je vais regarder un peu plus.
  • double possible de Impossible de désérialiser PyMongo ObjectId de JSON
  • J'ai vu que l'un et essayé d'utiliser l'aide. Mais si vous remarquez, la chaîne de il a le précédent de 'u' en face de '_id' et un intervenant a indiqué que représente une chaîne unicode python
  • WTH est qui? Le lien renvoie à cette question.
  • Désolé pour la confusion, @VSG24. Je vais le supprimer.