sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur kan jag använda Python för att omvandla MongoDB:s bsondump till JSON?

Det du har är en dumpning i Mongo Extended JSON i TenGen-läge (se här). Några möjliga vägar att gå:

  1. Om du kan dumpa igen, använd Strict output-läge genom MongoDB REST API. Det borde ge dig riktig JSON istället för vad du har nu.

  2. Använd bson från http://pypi.python.org/pypi/bson/ för att läsa in den BSON du redan har i Python-datastrukturer och sedan göra den bearbetning du behöver på dessa (möjligen matar ut JSON).

  3. Använd MongoDB Python-bindningar för att ansluta till databasen för att få in data till Python och gör sedan den bearbetning du behöver. (Om det behövs kan du ställa in en lokal MongoDB-instans och importera dina dumpade filer till den.)

  4. Konvertera Mongo Extended JSON från TenGen-läge till strikt läge. Du kan utveckla ett separat filter för att göra det (läs från stdin, ersätt TenGen-strukturer med strikta strukturer och mata ut resultatet på stdout) eller så kan du göra det när du bearbetar indata.

Här är ett exempel med Python och reguljära uttryck:

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))

Beroende på ditt mål bör en av dessa vara en rimlig utgångspunkt.



  1. Hur tar man bort ett fält helt från ett MongoDB-dokument?

  2. Transaktionsstöd i MongoDB

  3. Hur man serialiserar en karta i Java för att lagra i Redis?

  4. Hur kan jag ansluta till MongoDB Atlas med Robomongo?