Pythonでdict型（辞書型）のデータをインデント付きの見やすいJSONに変換してprintする

Pythonの改修をしている時に「渡ってきてるdictの要素なんだろうな」と思ってとりあえずprintしたら複雑な階層構造のdictがダーッと1行で出力されて非常に困ってしまったので、見やすく表示する方法を備忘として残しておく。

# 環境
```
$ python --version
Python 3.12.0
```

# やり方（実行例）

Pythonを対話モードで起動して以下を実行すれば良い。
```python
import json

# JSONに変換して出力したいdictをここに定義
target_dict = {'food': {'fruits': {'red_fruits': ['apple', 'strawberry', 'cherry'], 'yellow_fruits': ['banana', 'pineapple', 'lemon'], 'green_fruits': ['kiwi', 'grape', 'green apple']}, 'vegetables': {'leafy_greens': ['spinach', 'lettuce', 'kale'], 'root_vegetables': ['potato', 'carrot', 'radish'], 'nightshades': ['tomato', 'cucumber', 'bell pepper']}}, 'animals': {'mammals': {'carnivores': ['lion', 'tiger', 'bear'], 'rodents': ['squirrel', 'guinea pig', 'beaver'], 'ungulates': ['horse', 'cow', 'deer']}, 'birds': {'birds_of_prey': ['eagle', 'hawk', 'vulture'], 'waterfowl': ['duck', 'pelican', 'seagull'], 'songbirds': ['nightingale', 'mockingbird', 'canary']}, 'reptiles': {'snakes': ['anaconda', 'boa constrictor', 'cobra'], 'turtles': ['red-eared slider', 'box turtle', 'sea turtle'], 'lizards': ['iguana', 'gecko', 'chameleon']}}, 'space': {'constellations': {'northern_hemisphere': ['Ursa Major', 'Cassiopeia', 'Perseus'], 'southern_hemisphere': ['Centaurus', 'Phoenix', 'Southern Cross']}, 'planets': {'inner_planets': ['Mercury', 'Venus', 'Earth', 'Mars'], 'gas_giants': ['Jupiter', 'Saturn'], 'ice_giants': ['Uranus', 'Neptune'], 'dwarf_planets': ['Pluto', 'Eris']}, 'astronauts': {'NASA': ['Neil Armstrong', 'Buzz Aldrin', 'Sally Ride'], 'Roscosmos': ['Yuri Gagarin', 'Valentina Tereshkova'], 'ESA': ['Thomas Pesquet', 'Samantha Cristoforetti']}}}

# インデント4のJSONデータに変換
json_data = json.dumps(target_dict, indent=4)
print(json_data)
```

## 実行結果
階層構造がわからなかった1行の複雑なdictデータが非常にわかりやすく出力される。
```json
{
    "food": {
        "fruits": {
            "red_fruits": [
                "apple",
                "strawberry",
                "cherry"
            ],
            "yellow_fruits": [
                "banana",
                "pineapple",
                "lemon"
            ],
            "green_fruits": [
                "kiwi",
                "grape",
                "green apple"
            ]
        },
        "vegetables": {
            "leafy_greens": [
                "spinach",
                "lettuce",
                "kale"
            ],
            "root_vegetables": [
                "potato",
                "carrot",
                "radish"
            ],
            "nightshades": [
                "tomato",
                "cucumber",
                "bell pepper"
            ]
        }
    },
    "animals": {
        "mammals": {
            "carnivores": [
                "lion",
                "tiger",
                "bear"
            ],
            "rodents": [
                "squirrel",
                "guinea pig",
                "beaver"
            ],
            "ungulates": [
                "horse",
                "cow",
                "deer"
            ]
        },
        "birds": {
            "birds_of_prey": [
                "eagle",
                "hawk",
                "vulture"
            ],
            "waterfowl": [
                "duck",
                "pelican",
                "seagull"
            ],
            "songbirds": [
                "nightingale",
                "mockingbird",
                "canary"
            ]
        },
        "reptiles": {
            "snakes": [
                "anaconda",
                "boa constrictor",
                "cobra"
            ],
            "turtles": [
                "red-eared slider",
                "box turtle",
                "sea turtle"
            ],
            "lizards": [
                "iguana",
                "gecko",
                "chameleon"
            ]
        }
    },
    "space": {
        "constellations": {
            "northern_hemisphere": [
                "Ursa Major",
                "Cassiopeia",
                "Perseus"
            ],
            "southern_hemisphere": [
                "Centaurus",
                "Phoenix",
                "Southern Cross"
            ]
        },
        "planets": {
            "inner_planets": [
                "Mercury",
                "Venus",
                "Earth",
                "Mars"
            ],
            "gas_giants": [
                "Jupiter",
                "Saturn"
            ],
            "ice_giants": [
                "Uranus",
                "Neptune"
            ],
            "dwarf_planets": [
                "Pluto",
                "Eris"
            ]
        },
        "astronauts": {
            "NASA": [
                "Neil Armstrong",
                "Buzz Aldrin",
                "Sally Ride"
            ],
            "Roscosmos": [
                "Yuri Gagarin",
                "Valentina Tereshkova"
            ],
            "ESA": [
                "Thomas Pesquet",
                "Samantha Cristoforetti"
            ]
        }
    }
}
```
:::note warn
似ているメソッドとして`json.dump()`があるが、そちらはファイルとして保存する際に使用するもので、今回の辞書型を文字列に変換する`json.dumps()`とは異なるので注意。
:::

# 余談
dictの出力形式を整えて表示するなら`pprint`モジュールが良いらしいが、今一つ使い方がわからなかった。

`json`モジュールなら引数でインデント指定ができて簡単に見慣れたJSONデータに出力できるため今回使用モジュールとして選んだ次第。

余裕がある時に`pprint`の使い方を調べて比較、追記します。

# 参考
[json — JSON encoder and decoder - Python 3.12.0 documentation](https://docs.python.org/3/library/json.html)