pythonはjson文字列を解析し、属性アクセスをサポートするオブジェクトを返します.
2050 ワード
需要
任意のjson文字列をpythonのobjectオブジェクトに変換し、変換後に属性アクセスをサポート
コード#コード#
ぶんせき
デフォルトでは、json.loads()はdictオブジェクトを返します.プロパティアクセスはサポートされていません.そのため、非常に不便です.
一方、json解析コマンドラインで使用されるargparseは、コマンドラインのキーワードを任意に規定し、属性アクセスを使用することができる.argparseソースコードを表示するとargparser呼び出しparse_が表示されます.Args()の後に返されるのはNamespaceオブジェクトで、ここで借りてみます.また、json.loadsにはobject_という名前があります.hookのパラメータは、objectを変換することをサポートしているので、上記のコードが結合されています.
任意の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を変換することをサポートしているので、上記のコードが結合されています.