2016-08-10 3 views
0

Ich hatte einige JSON-Daten, die ich Zeichenfolge mit konvertiert:Python: JSON gespeichert als String, nicht zurück zu JSON bekommen

myString = str(myJSON) 

und ich sparte in einer SQLite-Datenbank. Nun, wenn ich abrufen myString sieht mehr oder weniger wie folgt aus:

'{u\'foo\': False, u\'bar\': 20, u\'name\': u\'Anna\'}' 

Ich habe Probleme machen es zurück zu JSON gehen. Ich denke, das Hauptproblem ist diese extra u\ und \, die erschienen.

Ich habe versucht, mit und/oder json.loads ohne Glück. Irgendwelche Vorschläge? Vielen Dank!

+0

Sind Sie Fehler Form Python zu bekommen? Wenn ja, was sind diese Fehler? – drsnark

Antwort

1

Sie haben kein JSON. Sie haben ein Python-Wörterbuch.

Wenn Sie JSON hatten, müssten Sie es nicht in eine Zeichenfolge konvertieren, da es bereits eins wäre. Wie der DB-Wert jedoch zeigt, konvertieren Sie ein Diktat direkt in eine Zeichenfolge.

Tun Sie nichts davon. Wenn Sie JSON tatsächlich irgendwo empfangen, sollten Sie es nicht vor dem Schreiben in die Datenbank analysieren. Wenn Sie dieses Diktat programmatisch erstellen, sollten Sie es vor dem Speichern unter json.dumps(my_data) in eine Zeichenfolge konvertieren.

4

Sie können ast.literal_eval verwenden, um ein Wörterbuch zurück zu bekommen.

import ast 

original = {'foo': False, 'bar': 20, 'name': 'Anna'} 
dict_string = str(original) 
print original == dict_string # False 
print original == ast.literal_eval(dict_string) # True 

Das heißt, Sie sollten so etwas wie json.dumps und json.loads in Zukunft verwenden Wörterbücher zu speichern und abzurufen, wenn sie Zeichenfolge gespeichert werden müssen. Es ist generell nicht gut, Wörterbücher direkt in Strings zu schreiben.

0

Wie @Karin sagte, die Zeichenfolge ist nicht JSON, das heißt, Sie sollten json.dump() direkt mit dem var verwenden myJSON (dies var sollte ein dict sein) wie folgt aus:

myJSON = {'foo': False, 
       'bar': 20, 
       'name': 'Anna'} 

    with open('foo.json', 'w') as f: 
     json.dump(myJSON, f) 

Nun zu Entfernen Sie das \ Zeichen in Ihrer Zeichenfolge, verwenden Sie einfach replace().

zB:

import ast 

json_dict = ast.literal_eval(myString.replace('\\', ''))