Apa yang Anda miliki adalah dump di Mongo Extended JSON dalam mode TenGen (lihat di sini). Beberapa cara yang mungkin untuk dilakukan:
-
Jika Anda dapat membuang lagi, gunakan mode keluaran Ketat melalui API REST MongoDB. Itu akan memberi Anda JSON nyata alih-alih apa yang Anda miliki sekarang.
-
Gunakan
bson
dari http://pypi.python.org/pypi/bson/ untuk membaca BSON yang sudah Anda miliki ke dalam struktur data Python dan kemudian melakukan pemrosesan apa pun yang Anda perlukan pada itu (mungkin menghasilkan JSON). -
Gunakan binding MongoDB Python untuk terhubung ke database guna memasukkan data ke Python, lalu lakukan pemrosesan apa pun yang Anda perlukan. (Jika perlu, Anda dapat menyiapkan instance MongoDB lokal dan mengimpor file yang dibuang ke dalamnya.)
-
Ubah JSON Mongo Extended dari mode TenGen ke mode Ketat. Anda dapat mengembangkan filter terpisah untuk melakukannya (baca dari stdin, ganti struktur TenGen dengan struktur Strict, dan keluarkan hasilnya di stdout) atau Anda dapat melakukannya saat memproses input.
Berikut ini contoh penggunaan Python dan ekspresi reguler:
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))
Bergantung pada tujuan Anda, salah satunya harus menjadi titik awal yang masuk akal.