Wie kann man ein Diktat in eine JSON-Datei kopieren?


237

Ich habe ein Diktat wie dieses:

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

Ich kann nicht herausfinden, wie das Diktat in eine jsonDatei geschrieben wird, wie unten gezeigt:

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

Gibt es eine pythonische Möglichkeit, dies zu tun?

Sie können sich vorstellen, dass ich eine d3Baumkarte erstellen möchte .

Antworten:


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

Dies ist ein einfacher Weg, dies zu tun.

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

In der dritten Zeile wird Ihr Diktat samplein das geschrieben result.json!


1
@ Danish Weiß nicht. Sofern zu SO kein Problem zu Ihrem Problem vorliegt, sollten Sie eine neue Frage erstellen, die Ihr Problem beschreibt. (Übrigens bin ich einfach ein Herausgeber dieser Beiträge)
Fermi Paradox

8
Tipp: Wenn Sie nicht in eine Datei schreiben möchten und nur die Ausgabe sehen möchten, versuchen Sie, sie anstdout: json.dump('SomeText', sys.stdout)
Arindam Roychowdhury

1
@ Dan-ish Hast du es mit json.dump versucht (sample, fp, sort_keys = False)? Vorausgesetzt, ich verstehe, was du meinst.
Chris Larson

3
Es ist gut, sich daran zu erinnern, dass es OrderedDictkeine Garantie dafür gibt, dass Schlüssel auf eine bestimmte Weise bestellt werden
Ford-Präfekt

1
Es wirft "dumps () nimmt 1 Positionsargument, aber 2 wurden gegeben" Fehler
Vijay Nirmal

40

Kombiniere die Antwort von @mgilson und @gnibbler, ich fand, was ich brauche, war Folgendes:


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

Auf diese Weise habe ich eine hübsch gedruckte JSON-Datei erhalten. Die Tricksprint >> f, j finden Sie hier: http://www.anthonydebarros.com/2012/03/11/generate-json-from-sql-using-python/


16
print(j, file=f)in Python 3.6 (anstelle von print >> f, j)
mjkrause

print(j, file=f)hat bei mir nicht funktioniert, ich musste auch nicht den J-Teil machen. d = {'a':1, 'b':2} print(d, file=open('sample.json', 'wt'))hat funktioniert.
HS Rathore

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

Natürlich ist es unwahrscheinlich, dass die Reihenfolge genau eingehalten wird ... Aber das ist nur die Natur von Wörterbüchern ...


6
json_string = json.dumps (d ,, sort_keys = True), wenn eine sortierte Reihenfolge gewünscht wird.
Chris Larson

13

Dies sollte Ihnen einen Anfang geben

>>> import json
>>> print json.dumps([{'name': k, 'size': v} for k,v in sample.items()], indent=4)
[
    {
        "name": "PointInterpolator",
        "size": 1675
    },
    {
        "name": "ObjectInterpolator",
        "size": 1629
    },
    {
        "name": "RectangleInterpolator",
        "size": 2042
    }
]

1

mit hübschem Druckformat:

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)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.