dictをjsonファイルにダンプする方法は?


239

私はこのような口述を持っています:

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

json以下に示すように、dictをファイルにダンプする方法がわかりません。

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

これを行うためのPython的な方法はありますか?

私はd3ツリーマップを生成したいと思うかもしれません。

回答:


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

これは、より簡単な方法です。

コードの2行目で、ファイルresult.jsonが作成され、変数として開かれますfp

3行目で、あなたの辞書sampleresult.json


1
@デンマークわからない。あなたの問題についてすでにSOに質問がない限り、あなたの問題を説明する新しい質問を作成する必要があります。(ところで、私は単にそれらの投稿の編集者です)
フェルミパラドックス

8
ヒント:ファイルへの書き込みを望まず、出力のみを表示する場合は、リダイレクトしてみてください stdout: json.dump('SomeText', sys.stdout)
Arindam Roychowdhury

1
@ Dan-ish json.dump(sample、fp、sort_keys = False)を試しましたか?私があなたの意味を理解していると仮定します。
Chris Larson、2016

3
ここで覚えておかなければならないのは、OrderedDict(python> 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 2017

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

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

pretty-print形式で:

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.