Това, което имате, е дъмп в Mongo Extended JSON в режим TenGen (вижте тук). Някои възможни начини:
-
Ако можете да изхвърлите отново, използвайте режим на строг изход чрез MongoDB REST API. Това трябва да ви даде истински JSON вместо това, което имате сега.
-
Използвайте
bson
от http://pypi.python.org/pypi/bson/, за да прочетете BSON, който вече имате, в структурите от данни на Python и след това да извършите каквато и да е обработка, която ви е необходима (евентуално извеждане на JSON). -
Използвайте обвързванията на MongoDB Python, за да се свържете с базата данни, за да получите данните в Python, и след това направете каквато обработка ви е необходима. (Ако е необходимо, можете да настроите локален екземпляр на MongoDB и да импортирате изхвърлените си файлове в него.)
-
Преобразувайте Mongo Extended JSON от режим TenGen в строг режим. Можете да разработите отделен филтър, за да го направите (четете от stdin, заменете структурите TenGen със Strict структури и изведете резултата на stdout) или можете да го направите, докато обработвате входа.
Ето пример за използване на Python и регулярни изрази:
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))
В зависимост от целта ви, една от тях трябва да бъде разумна отправна точка.