Jak zrzucić dykt do pliku JSON?


239

Mam taki dyktand:

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

Nie mogę wymyślić, jak zrzucić zrzut do jsonpliku, jak pokazano poniżej:

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

Czy istnieje pythoniczny sposób na zrobienie tego?

Możesz zgadywać, że chcę wygenerować d3mapę.

Odpowiedzi:


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

Jest to łatwiejszy sposób na zrobienie tego.

W drugim wierszu kodu plik result.jsonjest tworzony i otwierany jako zmienna fp.

W trzecim wierszu samplezapisuje się Twój dykt result.json!


1
@Danish Nie wiem. O ile nie ma już pytania na temat twojego problemu, powinieneś utworzyć nowe pytanie opisujące problem. (btw, jestem po prostu redaktorem tych postów)
paradoks Fermi

8
Wskazówka: jeśli nie chcesz zapisywać do pliku, a widzisz tylko dane wyjściowe, spróbuj przekierować je do stdout: json.dump('SomeText', sys.stdout)
Arindam Roychowdhury,

1
@ Dan-ish Czy próbowałeś json.dump (sample, fp, sort_keys = False)? Zakładając, że rozumiem, co masz na myśli.
Chris Larson

3
Warto pamiętać, że jeśli nie użyjesz OrderedDict(python> 2.7), nie ma gwarancji, że klucze zostaną zamówione w określony sposób
ford prefect

1
Zgłasza „zrzuty () przyjmują 1 argument pozycyjny, ale 2 otrzymały błąd”
Vijay Nirmal

40

Połącz odpowiedź @mgilson i @gnibbler, znalazłem to, czego potrzebowałem:


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()

W ten sposób otrzymałem ładny plik json. Sztuczki print >> f, jmożna znaleźć tutaj: http://www.anthonydebarros.com/2012/03/11/generate-json-from-sql-using-python/


16
print(j, file=f)w Python 3.6 (zamiast print >> f, j)
mjkrause,

print(j, file=f)nie działało dla mnie, nie musiałem też wykonywać części J. d = {'a':1, 'b':2} print(d, file=open('sample.json', 'wt'))pracował
HS Rathore

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

Oczywiście mało prawdopodobne jest, aby porządek został dokładnie zachowany ... Ale taka jest tylko natura słowników ...


6
json_string = json.dumps (d, sort_keys = True), jeśli pożądana jest kolejność sortowania.
Chris Larson,

13

To powinno dać ci początek

>>> 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

w formacie ładnego wydruku:

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)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.