正規表現を使用してそれを行う1つの方法、
import re
camel_pat = re.compile(r'([A-Z])')
under_pat = re.compile(r'_([a-z])')
def camel_to_underscore(name):
return camel_pat.sub(lambda x: '_' + x.group(1).lower(), name)
def underscore_to_camel(name):
return under_pat.sub(lambda x: x.group(1).upper(), name)
と、
>>> camel_to_underscore('camelCaseNames')
'camel_case_names'
>>> underscore_to_camel('names_with_underscores')
'namesWithUnderscores'
注: 大文字と小文字の変更を行うには関数 (lambda
ここでは式) を使用する必要がありますが、これは非常に簡単に思えます。
編集:
Python と Javascript の間で json オブジェクトをインターセプトして調整したい場合は、json モジュールの機能を書き直す必要があります。しかし、それは価値があるよりもはるかに面倒だと思います。代わりに、このようなものは同等であり、パフォーマンス面であまりヒットしません.
json オブジェクトを表す各キーを変換するにはdict
、次のようにします。
def convert_json(d, convert):
new_d = {}
for k, v in d.iteritems():
new_d[convert(k)] = convert_json(v,convert) if isinstance(v,dict) else v
return new_d
適用する関数を指定するだけで済みます。
>>> json_obj = {'nomNom': {'fooNom': 2, 'camelFoo': 3}, 'camelCase': {'caseFoo': 4, 'barBar': {'fooFoo': 44}}}
>>> convert_json(json_obj, camel_to_underscore)
{'nom_nom': {'foo_nom': 2, 'camel_foo': 3}, 'camel_case': {'case_foo': 4, 'bar_bar': {'foo_foo': 44}}}
このすべてのロジックを new関数load
とdump
関数でラップできます。
import json
def convert_load(*args, **kwargs):
json_obj = json.load(*args, **kwargs)
return convert_json(json_obj, camel_to_underscore)
def convert_dump(*args, **kwargs):
args = (convert_json(args[0], underscore_to_camel),) + args[1:]
json.dump(*args, **kwargs)
そして、 then と同じように使用しjson.load
ますjson.dump
。