2017-02-20 15 views
0

In Python 3, json zuvor auf diese Weise gespeichert laden:Python JSON-Objekt muss str, Bytes oder bytearray werden, nicht ‚dict

json.dumps(dictionary)

der Ausgang ist so etwas wie

{"('Hello',)": 6, "('Hi',)": 5}

wenn ich

json.loads({"('Hello',)": 6, "('Hi',)": 5})

verwenden

es nicht funktioniert, dies geschieht:

TypeError: the JSON object must be str, bytes or bytearray, not 'dict'

+1

'json.loads ('' {'(' Hallo ',)": 6, "(' Hi ',)": 5}' '') '. Das 's' in' Lasten' steht für String. – BallpointBen

+0

Sieht so aus, als ob Sie bereits mit dem eigentlichen Wörterbuch und nicht mit einer Zeichenfolge arbeiten. Wie liest du die Daten ein, die du verloren hast? – jorijnsmit

Antwort

11

json.loads nimmt einen String als Eingabe und gibt einen Wörterbuch als Ausgabe.

nehmen Sie ein Wörterbuch als Eingabe und gibt eine Zeichenfolge als Ausgabe zurück.


Mit json.loads({"('Hello',)": 6, "('Hi',)": 5}),

Sie rufen json.loads mit einem Wörterbuch als Eingabe.

Sie können das Problem beheben wie folgt (obwohl ich nicht ganz sicher bin, was der Punkt, das ist):

d1 = {"('Hello',)": 6, "('Hi',)": 5} 
s1 = json.dumps(d1) 
d2 = json.loads(s1) 
+0

Danke @barak manos das hat wirklich geholfen. Ich hatte eine Rückkehr Daten, die 'json.loads (Daten)' war. Wenn ich das mit 'json.dumps (loadedData) decodiere, werde ich den obigen Fehler los und verwalte es, das durch 'object_hook' in ein Python-Objekt umzuwandeln. –

1

Sie sind ein Wörterbuch an eine Funktion, die eine Zeichenfolge erwartet.

Diese Syntax:

{"('Hello',)": 6, "('Hi',)": 5} 

ist sowohl ein gültiger Python-Wörterbuch wörtlichen und ein gültiges JSON Objektliteral. Aber loads nimmt kein Wörterbuch; Es nimmt eine Zeichenfolge, die es dann als JSON interpretiert und gibt das Ergebnis als ein Wörterbuch (oder String oder Array oder Nummer, abhängig von der JSON, aber in der Regel ein Wörterbuch).

Wenn Sie diese Zeichenfolge loads passieren:

'''{"('Hello',)": 6, "('Hi',)": 5}''' 

dann wird es ein Wörterbuch zurück, die viel wie die zu übergeben Sie versuchen, aussieht.

Sie könnten ausnutzen auch die Ähnlichkeit von JSON Objektliterale zu Python Wörterbuch Literale durch dies zu tun:

json.loads(str({"('Hello',)": 6, "('Hi',)": 5})) 

Aber in beiden Fällen würden Sie nur das Wörterbuch zurück, die Sie nebenbei sind, so dass ich Ich bin mir nicht sicher, was es erreichen würde. Was ist dein Ziel?

Verwandte Themen