472 Stimmen

Wie kann man ein Wörterbuch in eine JSON-Datei umwandeln?

Ich habe ein dict wie dieses:

sample = {'ObjectInterpolator': 1629,  'PointInterpolator': 1675, 'RectangleInterpolator': 2042}

Ich kann nicht herausfinden, wie ich das dict in eine JSON-Datei dumpen soll, wie unten gezeigt:

{      
    "name": "interpolator",
    "children": [
      {"name": "ObjectInterpolator", "size": 1629},
      {"name": "PointInterpolator", "size": 1675},
      {"name": "RectangleInterpolator", "size": 2042}
     ]
}

Gibt es einen pythonischen Weg, dies zu tun?

Sie können vermuten, dass ich einen d3 Treemap generieren möchte.

791voto

moobi Punkte 7799
import json
with open('result.json', 'w') as fp:
    json.dump(sample, fp)

Dies ist ein einfacherer Weg, um es zu tun.

In der zweiten Codezeile wird die Datei result.json erstellt und als Variable fp geöffnet.

In der dritten Zeile wird dein dict sample in die result.json geschrieben!

59voto

holys Punkte 12741

Kombinieren Sie die Antwort von @mgilson und @gnibbler, ich fand heraus, dass ich das brauchte:

d = {
    "name": "Interpolator",
    "children": [{
        'name': key,
        "size": value
        } for key, value in sample.items()]
    }
j = json.dumps(d, indent=4)
with open('sample.json', 'w') as f:
    print >> f, j

Auf diese Weise erhielt ich eine schön formatierte JSON-Datei. Der Trick print >> f, j stammt von hier: http://www.anthonydebarros.com/2012/03/11/generate-json-from-sql-using-python/

29voto

mgilson Punkte 280928
d = {"name":"interpolator",
     "children":[{'name':key,"size":value} for key,value in sample.items()]}
json_string = json.dumps(d)

Seit Python 3.7 wird die Reihenfolge von dicts beibehalten https://docs.python.org/3.8/library/stdtypes.html#mapping-types-dict

Dictionarys behalten die Einfügereihenfolge bei. Beachten Sie, dass das Aktualisieren eines Schlüssels die Reihenfolge nicht beeinflusst. Schlüssel, die nach dem Löschen hinzugefügt werden, werden am Ende eingefügt

25voto

als0052 Punkte 299

Auch das hinzufügen (Python 3.7)

import json

with open("dict_to_json_textfile.txt", 'w') as fout:
    json_dumps_str = json.dumps(a_dictionary, indent=4)
    print(json_dumps_str, file=fout)

Update (11-04-2021): Also habe ich dieses Beispiel hinzugefügt, weil manchmal die Funktion print() zum Schreiben in Dateien verwendet werden kann, und dies zeigt auch, wie man Einrückungen verwendet (nicht eingerückter Code ist böse!!). Aber ich habe kürzlich begonnen, mich mit Thread-Programmierung zu beschäftigen und meine Recherche hat gezeigt, dass die Anweisung print() nicht immer thread-sicher ist. Wenn Sie Thread-Programmierung benötigen, sollten Sie also vorsichtig sein.

18voto

jmhostalet Punkte 3901

Mit pretty-print-Format:

import json

with open(path_to_file, 'w') as file:
    json_string = json.dumps(sample, default=lambda o: o.__dict__, sort_keys=True, indent=2)
    file.write(json_string)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X