sql >> Database >  >> NoSQL >> MongoDB

Hoe kan ik Python gebruiken om MongoDB's bsondump om te zetten in JSON?

Wat je hebt is een dump in Mongo Extended JSON in TenGen-modus (zie hier). Enkele mogelijke manieren om te gaan:

  1. Als u opnieuw kunt dumpen, gebruikt u de strikte uitvoermodus via de MongoDB REST API. Dat zou je echte JSON moeten geven in plaats van wat je nu hebt.

  2. Gebruik bson van http://pypi.python.org/pypi/bson/ om de BSON die je al hebt in te lezen in Python-gegevensstructuren en vervolgens de bewerkingen daarop uit te voeren (mogelijk JSON uitvoeren).

  3. Gebruik de MongoDB Python-bindingen om verbinding te maken met de database om de gegevens in Python te krijgen en voer vervolgens de verwerking uit die u nodig hebt. (Indien nodig kunt u een lokale MongoDB-instantie opzetten en uw gedumpte bestanden daarin importeren.)

  4. Converteer de Mongo Extended JSON van TenGen-modus naar Strict-modus. Je zou een apart filter kunnen ontwikkelen om dit te doen (lees van stdin, vervang TenGen-structuren door Strict-structuren en voer het resultaat uit op stdout) of je zou het kunnen doen terwijl je de invoer verwerkt.

Hier is een voorbeeld waarin Python en reguliere expressies worden gebruikt:

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

Afhankelijk van je doel, zou een van deze een redelijk uitgangspunt moeten zijn.



  1. Airflow CROSSSLOT Sleutels in verzoek hashen niet naar dezelfde slotfout met AWS ElastiCache

  2. Geëxporteerde MongoDB-documenten mooier maken in mongoexport

  3. Spring Data MongoDB met Java 8 LocalDate MappingException

  4. WRONGTYPE Operatie tegen een sleutel met de verkeerde waarde php