Những gì bạn có là một kết xuất trong Mongo Extended JSON ở chế độ TenGen (xem tại đây). Một số cách có thể thực hiện:
-
Nếu bạn có thể kết xuất lại, hãy sử dụng chế độ xuất Nghiêm ngặt thông qua API MongoDB REST. Điều đó sẽ cung cấp cho bạn JSON thực thay vì những gì bạn có bây giờ.
-
Sử dụng
bson
từ http://pypi.python.org/pypi/bson/ để đọc BSON mà bạn đã có trong cấu trúc dữ liệu Python và sau đó thực hiện bất kỳ quá trình xử lý nào bạn cần trên các cấu trúc đó (có thể xuất ra JSON). -
Sử dụng các liên kết MongoDB Python để kết nối với cơ sở dữ liệu để lấy dữ liệu sang Python, sau đó thực hiện bất kỳ quá trình xử lý nào bạn cần. (Nếu cần, bạn có thể thiết lập phiên bản MongoDB cục bộ và nhập các tệp đã kết xuất của bạn vào đó.)
-
Chuyển đổi Mongo Extended JSON từ chế độ TenGen sang chế độ Nghiêm ngặt. Bạn có thể phát triển một bộ lọc riêng để làm điều đó (đọc từ stdin, thay thế cấu trúc TenGen bằng cấu trúc Nghiêm ngặt và xuất kết quả trên stdout) hoặc bạn có thể làm điều đó khi bạn xử lý đầu vào.
Đây là một ví dụ sử dụng Python và các biểu thức chính quy:
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))
Tùy thuộc vào mục tiêu của bạn, một trong những mục tiêu này phải là điểm khởi đầu hợp lý.