Ich rufe Twitter-Daten mit einem Python-Tool ab und speichere diese im JSON-Format auf meiner Festplatte. Ich bemerkte ein unbeabsichtigtes Entweichen der gesamten Datenzeichenfolge für einen Tweet, der in doppelte Anführungszeichen eingeschlossen war. Darüber hinaus werden alle doppelten Anführungszeichen der tatsächlichen JSON-Formatierung mit einem Backslash maskiert.
Sie sehen so aus:
"{" created_at ":" Fri Aug 08 11:04:40 +0000 2014 "," id ": 497699913925292032,
Wie vermeide ich das? Es sollte sein:
{"created_at": "Fri Aug 08 11:04:40 +0000 2014" .....
Mein File-Out-Code sieht folgendermaßen aus:
with io.open('data'+self.timestamp+'.txt', 'a', encoding='utf-8') as f:
f.write(unicode(json.dumps(data, ensure_ascii=False)))
f.write(unicode('\n'))
Das unbeabsichtigte Escapezeichen verursacht Probleme beim Einlesen der JSON-Datei in einem späteren Verarbeitungsschritt.
data
, die bereits codierte JSON-Daten enthält. Ja, ich habe den Variablennamen verwendet, umencoded_data
zu veranschaulichen, was vor sich ging.Eine andere Situation, in der dieses unerwünschte Entkommen auftreten kann, besteht darin, dass Sie versuchen, json.dump () für die vorverarbeitete Ausgabe von json.dumps () zu verwenden. Zum Beispiel
import json, sys json.dump({"foo": json.dumps([{"bar": 1}, {"baz": 2}])},sys.stdout)
wird darin enden, dass
{"foo": "[{\"bar\": 1}, {\"baz\": 2}]"}
Um dies zu vermeiden, müssen Sie Wörterbücher übergeben und nicht die Ausgabe von json.dumps (), z
json.dump({"foo": [{"bar": 1}, {"baz": 2}]},sys.stdout)
welches das gewünschte ausgibt
{"foo": [{"bar": 1}, {"baz": 2}]}
(Warum sollten Sie die innere Liste mit json.dumps () vorverarbeiten, fragen Sie? Nun, ich hatte eine andere Funktion, die diese innere Liste aus anderen Dingen erstellte, und ich dachte, es wäre sinnvoll, ein json-Objekt von zurückzugeben diese Funktion ... falsch.)
quelle