Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
114
Help us understand the problem. What is going on with this article?
@Hyperion13fleet

[python] JSONファイルのフォーマットを整えてDumpする

More than 1 year has passed since last update.

あまりにも単純なことなので、書くまでもないかと思ったけど、これから何回も使いそうなので、メモがてらjsonのダンプ方法をまとめておく。

例えば、こんな感じの辞書をjsonとしてdumpしようとした時、幾つかの問題に出くわした。

dict_sample = {'幽助': {'霊丸': {'ショットガン': 30, '霊光弾': 40}}, '桑原': '霊剣', 'Hiei': '邪王炎殺黒龍波', 'Kurama': 'ローズウィップ'}

f = open("output.json", "w")
json.dump(dict_sample, f)

上記のような日本語まじりの複雑な辞書をそのままdumpしてしまうと、出力は非常に見にくいものが出てくる。

output.json
{"Hiei": "\u90aa\u738b\u708e\u6bba\u9ed2\u9f8d\u6ce2", "Kurama": "\u30ed\u30fc\u30ba\u30a6\u30a3\u30c3\u30d7", "\u6851\u539f": "\u970a\u5263", "\u5e7d\u52a9": {"\u970a\u4e38": {"\u970a\u5149\u5f3e": 40, "\u30b7\u30e7\u30c3\u30c8\u30ac\u30f3": 30}}}

ワンライナーかよ!!asciiコードかよ!!

ということで、

jsonを綺麗に表示できるようにdumpする

単に、json.dumpメソッドに幾つかのオプションを加えてあげるだけでいい感じのフォーマットに整形してくれる。

dict_sample = {'幽助': {'霊丸': {'ショットガン': 30, '霊光弾': 40}}, '桑原': '霊剣', 'Hiei': '邪王炎殺黒龍波', 'Kurama': 'ローズウィップ'}

f = open("output.json", "w")
json.dump(dict_sample, f, ensure_ascii=False, indent=4, sort_keys=True, separators=(',', ': '))

ensure_ascii: False の場合、文字はそのまま出力されるとのこと
indent: 辞書のKeyやValueの階層を識別するためのインデント数
sort_keys: Keyでソートするか否か
separators:tuppleで1.KeyとValueを識別する区切り、2.要素を識別する区切りを指定できる

結果はこんな感じで帰ってくる

output.json
{
    "Hiei": "邪王炎殺黒龍波",
    "Kurama": "ローズウィップ",
    "幽助": {
        "霊丸": {
            "ショットガン": 30,
            "霊光弾": 40
        }
    },
    "桑原": "霊剣"
}

めっちゃ読みやすくなった。

参考
公式ドキュメント

114
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
brainpad
ブレインパッドは、2004年の創業以来、データによるビジネス創造と経営改善に向き合ってきたデータ活用・分析企業です。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
114
Help us understand the problem. What is going on with this article?