Quello che hai è un dump in Mongo Extended JSON in modalità TenGen (vedi qui). Alcuni possibili modi per andare:
-
Se è possibile eseguire nuovamente il dump, utilizzare la modalità di output Strict tramite l'API REST di MongoDB. Questo dovrebbe darti un JSON reale invece di quello che hai ora.
-
Usa
bson
da http://pypi.python.org/pypi/bson/ per leggere il BSON che hai già nelle strutture dati Python e quindi eseguire l'elaborazione necessaria su quelle (possibilmente l'output di JSON). -
Usa i collegamenti Python MongoDB per connetterti al database per ottenere i dati in Python, quindi esegui l'elaborazione di cui hai bisogno. (Se necessario, puoi configurare un'istanza MongoDB locale e importarvi i file scaricati.)
-
Converti il Mongo Extended JSON dalla modalità TenGen alla modalità Strict. Potresti sviluppare un filtro separato per farlo (leggere da stdin, sostituire le strutture TenGen con le strutture Strict e restituire il risultato su stdout) oppure potresti farlo mentre elabori l'input.
Ecco un esempio che utilizza Python e le espressioni regolari:
import json, re
from bson import json_util
with open("data.tengenjson", "rb") as f:
# read the entire input; in a real application,
# you would want to read a chunk at a time
bsondata = f.read()
# convert the TenGen JSON to Strict JSON
# here, I just convert the ObjectId and Date structures,
# but it's easy to extend to cover all structures listed at
# http://www.mongodb.org/display/DOCS/Mongo+Extended+JSON
jsondata = re.sub(r'ObjectId\s*\(\s*\"(\S+)\"\s*\)',
r'{"$oid": "\1"}',
bsondata)
jsondata = re.sub(r'Date\s*\(\s*(\S+)\s*\)',
r'{"$date": \1}',
jsondata)
# now we can parse this as JSON, and use MongoDB's object_hook
# function to get rich Python data structures inside a dictionary
data = json.loads(jsondata, object_hook=json_util.object_hook)
# just print the output for demonstration, along with the type
print(data)
print(type(data))
# serialise to JSON and print
print(json_util.dumps(data))
A seconda del tuo obiettivo, uno di questi dovrebbe essere un punto di partenza ragionevole.