问题:在 python 中,用默认的方式解析 json 对象得到的是字典,如果要取值,需要这样取:
my_value = my_json["key1"]["key11"]
那么能否把这个 json 对象解析之后变成类的形式,像取类的属性一样,去取值呢?就像这样取:
my_value = my_json.key1.key11
当然可以,请看下面:
省流版
import json
from types import SimpleNamespace
json_parsed = json.loads(json_str, object_hook=lambda d: SimpleNamespace(**d))
详细版
如果我有一个这样的 json
{
"key1": "value1",
"key2": {
"key21": "value21",
"key22": "value22"
}
}
使用默认的方式解析这个 json 是这样操作的:
import json
json_parsed = json.loads(json_str)
这样会得到:
如果想取到 "value22"
需要这样取:
json_parsed["key2"]["key22"]
但是如果我想像取类对象一样,想这样取:
my_value = my_json.key2.key22
就应该这样做:
解决方法
import json
from types import SimpleNamespace
json_parsed = json.loads(json_str, object_hook=lambda d: SimpleNamespace(**d))
这样会得到:
可以看到整个 json_parsed
对象成为了一个 SimpleNamespace
,我们就可以直接 json_parsed.key2.key22
这样来取到 "value22"
了。