Lo que tienes es un volcado en Mongo Extended JSON en modo TenGen (ver aquí). Algunas formas posibles de ir:
-
Si puede volcar nuevamente, use el modo de salida estricto a través de la API REST de MongoDB. Eso debería darte JSON real en lugar de lo que tienes ahora.
-
Usa
bson
desde http://pypi.python.org/pypi/bson/ para leer el BSON que ya tiene en las estructuras de datos de Python y luego hacer el procesamiento que necesite en esos (posiblemente generar JSON). -
Use los enlaces de MongoDB Python para conectarse a la base de datos para obtener los datos en Python y luego realice el procesamiento que necesite. (Si es necesario, puede configurar una instancia local de MongoDB e importar sus archivos volcados allí).
-
Convierta Mongo Extended JSON del modo TenGen al modo estricto. Puede desarrollar un filtro separado para hacerlo (leer desde la entrada estándar, reemplazar las estructuras TenGen con estructuras estrictas y mostrar el resultado en la salida estándar) o puede hacerlo mientras procesa la entrada.
Aquí hay un ejemplo usando Python y expresiones regulares:
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))
Dependiendo de su objetivo, uno de estos debería ser un punto de partida razonable.