pythonはjson文字列を解析し、属性アクセスをサポートするオブジェクトを返します.

2050 ワード

需要
任意のjson文字列をpythonのobjectオブジェクトに変換し、変換後に属性アクセスをサポート
コード#コード#
from argparse import Namespace
import json
def json_to_object(data):
    return json.loads(data, object_hook=lambda d: Namespace(**d))

with open("default.json") as f:
    args = json_to_object(f.read())

ぶんせき
デフォルトでは、json.loads()はdictオブジェクトを返します.プロパティアクセスはサポートされていません.そのため、非常に不便です.
>>> import json
>>> s = json.loads('{"name":"rumor","age":25}')
>>> s
{u'age': 25, u'name': u'rumor'}
>>> type(s)
'dict'>
>>> s.name
Traceback (most recent call last):
  File "", line 1, in 
AttributeError: 'dict' object has no attribute 'name'

一方、json解析コマンドラインで使用されるargparseは、コマンドラインのキーワードを任意に規定し、属性アクセスを使用することができる.argparseソースコードを表示するとargparser呼び出しparse_が表示されます.Args()の後に返されるのはNamespaceオブジェクトで、ここで借りてみます.また、json.loadsにはobject_という名前があります.hookのパラメータは、objectを変換することをサポートしているので、上記のコードが結合されています.