💡

【Python】スネークケースとキャメルケースの変換

2021/10/13に公開

背景

バックエンド: Python
フロントエンド: Vue.js

での開発のなかで、json形式のデータの受け渡しを行う場面がありました。

Pythonではjsonのキーをスネークケース、Vue.jsではキャメルケースで使用したいなと思ったのがきっかけで、各方向で変換できるメソッドを作成したので共有です。

スネークケース→キャメルケース

import re

''''
dict  = {'snake_case': True, 'camel_case': False }
↓
dict  = {'snakeCase': True, 'camelCase': False }
'''

# dictのkeyをスネークケースからキャメルケースに変換する
def convert_camel(dict):
    keys = dict.copy().keys()
    for key in keys:
        value = dict[key]
        del dict[key]
        camel_key = re.sub("_(.)",lambda x:x.group(1).upper(),key)
        dict[camel_key] = value
    return dict

キャメルケース→スネークケース

import re

''''
dict  = {'snakeCase': False, 'camelCase': True }
↓
dict  = {'snake_case': False, 'camel_case': True }
'''

# dictのkeyをキャメルケースからスネークケースに変換する
def convert_snake(dict):
    keys = dict.copy().keys()
    for key in keys:
        value = dict[key]
        del dict[key]
        camel_key = re.sub("([A-Z])",lambda x:"_" + x.group(1).lower(),key)
        dict[camel_key] = value
    return dict

気をつけたこと

いずれもkeys = dict.copy().keys()で値渡しにしてあげるのコツです。

(参照渡しだと変換した後のjsonからをkeysを再び取得して、for文の中でまた変換処理を始めてしまうため)

Discussion