Die PyMongo-Objekt-ID kann nicht aus JSON deserialisiert werden

8

Ich bin anscheinend nicht in der Lage, mein MongoDB-JSON-Dokument mit dem BSON json_util zu deserialisieren .

Die Funktion json.loads unterdrückt die Zeichenfolge ObjectId() . Ich hatte verstanden, dass json_util das ObjectId-Format von MongoDB handhaben und in brauchbares JSON transformieren kann.

Python-Code:

%Vor%

Ich bekomme die Decoder-Ausnahme:

%Vor%

Vermisse ich etwas?

    
jdev 07.12.2011, 01:07
quelle

2 Antworten

15

Ich denke, Ihre String-Form sieht tatsächlich wie die Python-Darstellung aus ...

%Vor%

Die bson.json_util.object_hook-Funktion scheint keine Art von Behandlung zu haben, da ObjectId () in der tatsächlichen json-String-Repräsentation vorhanden ist.

    
jdi 07.12.2011, 02:04
quelle
3

Hier gibt es zwei Probleme:

  1. Die Zeichenfolge, die Sie versuchen, JSON-decode, ist nicht JSON, es ist die Zeichenfolgendarstellung eines Python-Wörterbuchs. Das Problem ist insbesondere, dass u'_id' kein gültiger JSON-Schlüssel ist (JSON-Schlüssel sind in Anführungszeichen geschriebene Strings; das "u" gibt hier eine Python-Unicode-Zeichenfolge an, die in JSON bedeutungslos ist)

  2. json_util.object_hook macht ObjectId nicht für JSON verfügbar; Das Modul json dekodiert den JSON und ruft dann den object_hook -Rückruf mit jedem dekodierten Objekt auf. json_util.object_hook sucht nach bestimmten Mustern, die im strikten Modus von MongoDB Extended JSON definiert sind / p>

Siehe @ jdi's Antwort für Beispiele, wie man json_util richtig einsetzt.

    
dcrosta 07.12.2011 02:06
quelle

Tags und Links