Pythonでjsonファイルを読み込んで、整形して、json出力

この前、PowerShellでjsonファイルを読み込み、必要な整形を行いjson出力する方法をまとめましたが、Pythonでやってみたので、備忘録として残しておきたいと思います。

[前回のPowerShellで行ったコード](https://qiita.com/le_naoki/items/15460b12d89339713dc3)

まず読み込むjsonファイルです。

```json:data.json
{
    "prefectures": [
        {
            "code": "Tokyo",
            "name": "東京"
        },
        {
            "code": "Osaka",
            "name": "大阪"
        },
        {
            "code": "Aichi",
            "name": "愛知"
        },
        {
            "code": "Fukuoka",
            "name": "福岡"
        }
    ],
    "tables": [
        {
            "code": "meeting_room",
            "name": "会議室",
            "field1": "id",
            "field2": "floar",
            "field3": "capacities"
        },
        {
            "code": "parking",
            "name": "駐車場",
            "field1": "id",
            "field2": "area",
            "field3": "space_number",
            "field4": "user_name",
            "field5": "car_number",
            "field6": "expire"
        }
    ]
}
```

出力したいのは、prefectures x tablesの各item事のjsonファイルです。
また、そのjsonはtablesのcode, nameそれぞれに地域コード、地域名を追加します。

## 完成形のコード

やってみたコードはこちらです。
17行目と22行目のfor文の中身がもっと綺麗にまとめられると思っているので、精進が必要ですね。

```Python:main.py
import os
import sys
import pathlib
import json
import itertools


def json_make():
    """
    Jsonデータから地域 x テーブル種類分のjsonを出力
    """
    jsonfile = open('data.json', 'r')
    data = json.load(jsonfile)

    prefectures = data['prefectures']
    tables = data['tables']

    for pref, table in itertools.product(prefectures, tables):
        pref_code = pref["code"]
        pref_name = pref["name"]
        result = {}

        for k in table:
            if k == 'code':
                result['code'] = f'{pref_code}_{table[k]}'
            elif k == 'name':
                result['name'] = f'{pref_name}_{table[k]}'
            else:
                result[k] = table[k]

        expfile = open("./results/" + result['code'] + '.json', 'w')
        # ensure_ascii=Falseをつけることで、日本語エンコードを回避
        json.dump(result, expfile, indent=4, ensure_ascii=False)


# ファイルがなければ処理しない
if os.path.exists('data.json') is False:
    sys.exit()

# 出力フォルダがなければ作成
exp = pathlib.Path('./results')
if exp.exists() is False:
    exp.mkdir()

json_make()

```

## 出力結果

```Terminal
naoki$ ls -l results
-rw-r--r--  1 naoki  staff  139  4 19 13:16 Aichi_meeting_room.json
-rw-r--r--  1 naoki  staff  214  4 19 13:16 Aichi_parking.json
-rw-r--r--  1 naoki  staff  141  4 19 13:16 Fukuoka_meeting_room.json
-rw-r--r--  1 naoki  staff  216  4 19 13:16 Fukuoka_parking.json
-rw-r--r--  1 naoki  staff  139  4 19 13:16 Osaka_meeting_room.json
-rw-r--r--  1 naoki  staff  214  4 19 13:16 Osaka_parking.json
-rw-r--r--@ 1 naoki  staff  139  4 19 13:16 Tokyo_meeting_room.json
-rw-r--r--  1 naoki  staff  214  4 19 13:16 Tokyo_parking.json
```

```json:Aichi_meeting_room.json
{
    "code": "Aichi_meeting_room",
    "name": "愛知_会議室",
    "field1": "id",
    "field2": "floar",
    "field3": "capacities"
}
```

```json:Aichi_parking.json
{
    "code": "Aichi_parking",
    "name": "愛知_駐車場",
    "field1": "id",
    "field2": "area",
    "field3": "space_number",
    "field4": "user_name",
    "field5": "car_number",
    "field6": "expire"
}
```