Json 파일에 dict를 덤프하는 방법은 무엇입니까?


239

나는 다음과 같은 dict가 있습니다 :

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

json아래 그림과 같이 dict을 파일로 덤프하는 방법을 알 수 없습니다 .

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

이것을 할 파이썬적인 방법이 있습니까?

d3트리 맵 을 생성하고 싶을 수도 있습니다 .

답변:


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

이것은 더 쉬운 방법입니다.

코드의 두 번째 줄에서 파일 result.json이 만들어지고 변수로 열립니다 fp.

세 번째 줄에서 당신의 dict sampleresult.json!


1
@Danish 모르겠다. 문제에 대해 SO에 대한 질문이 없으면 문제를 설명하는 새 질문을 작성해야합니다. (btw, 메신저 단순히 그 게시물의 편집자)
Fermi paradox

8
팁 : 파일에 쓰지 않고 출력 만 보는 경우 stdout: json.dump('SomeText', sys.stdout)
Arindam Roychowdhury

1
@ Dan-ish json.dump (sample, fp, sort_keys = False)를 사용해 보셨습니까? 당신이 무슨 뜻인지 이해한다고 가정합니다.
Chris Larson

3
여기서 기억해야 할 좋은 것은 당신이 사용하지 않는 것입니다 OrderedDict(파이썬> 2.7) 키를 특정 방식으로 정렬된다는 보장이 없다
포드 지사

1
"dumps ()는 1 개의 위치 인수를 취하지 만 2가 주어졌습니다"오류가 발생합니다.
Vijay Nirmal

40

@mgilson과 @gnibbler의 대답을 결합하면 필요한 것이 다음과 같습니다.


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

이렇게하면 예쁜 인쇄 json 파일이 생겼습니다. 트릭 print >> f, j은 여기에서 찾을 수 있습니다 : http://www.anthonydebarros.com/2012/03/11/generate-json-from-sql-using-python/


16
print(j, file=f)Python 3.6 (대신 print >> f, j)
mjkrause

print(j, file=f)나를 위해 일하지 않았다, 나는 J 부분도 할 필요가 없었다. d = {'a':1, 'b':2} print(d, file=open('sample.json', 'wt'))일했다.
HS Rathore

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

물론 순서가 정확하게 유지되지는 않지만 ... 사전의 본질입니다 ...


6
정렬 순서가 필요한 경우 json_string = json.dumps (d,, sort_keys = True)
Chris Larson

13

이것은 당신에게 시작을 제공해야합니다

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

예쁜 인쇄 형식으로 :

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)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.