目的
将任意一个 json 字符串,转换为 python 的 object 对象,转换后支持使用属性访问。
方法
json 解析命令行使用的 argparse,可以任意规定命令行关键字,并能使用属性访问。
查看 argparse 源码可以看到 argparser 调用 parse_args() 后返回的是一个 Namespace 对象,这里拿来借用一下;
同时,json.loads 有个名为 object_hook 的参数,支持将 object 进行转换,因此结合起来就有了以下代码。
from argparse import Namespace
import json
def json_to_object(data):
return json.loads(data, object_hook=lambda d: Namespace(**d))
效果
Python 3.6.8rc1 (v3.6.8rc1:cc3e73212a, Dec 11 2018, 17:37:34)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> from argparse import Namespace
>>> import json
>>>
>>>
>>> def json_to_object(data):
... return json.loads(data, object_hook=lambda d: Namespace(**d))
...
>>>
>>> json_data = json.dumps({"name": "rumor", "age": 25, "fav": {"fav1": "dog", "fav2": "food"}})
>>>
>>> print(json_to_object(json_data).fav.fav1)
dog
>>>