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 .

Heilige
quelle

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!

Moobi
quelle
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/

Heilige
quelle
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 ...

mgilson
quelle
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
    }
]
John La Rooy
quelle
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)
jmhostalet
quelle