modified | Thursday 1 May 2025 |
---|
Tuesday, July 20, 2021 at 11:57
Python: JSON 数 据 转 化 成 Python 对 象 的 方 法
JSON 格 式 的 数 据 在 和 服 务 命 通 信 过 程 中 很 常 见 , 用 Python 处 理 我 们
可 以 用 json 库 来 读 取 , 将 其 转 化 成 一 个 字 典 。 不 过 字 典 访 问 语 法 太 繁
琐 了 , 我 们 需 要 将 其 转 化 一 般 对 象 , 然 后 用 访 问 类 属 性 的 方 法 去 访 问key-value对。
直 接 硬 写 的 非 常 繁 琐 , 我 们 需 要 显 式 地 讲 类 定 义 出 来 ,
然 后 一 个 个 读 取 属 性 然 后 完 成 复 制 。 我 们 需 要 一 个 更 加 符 合 BRY (Dont Repeat Yourself) 原 则 的 方 法 。
下 面 是 使 用 simpleNamespace 的 做 法 :
1 import json
2 from types import SimpleNamespace
4 data = ‘{f“name“: “John Smith“ , “hometown“: {“name“: “New York“ , “id“: 123}}’
5
X = jjson.loads(data, object_hook=1ambda d: SimpleNamespace(**d) )
print (X.name, X.hometown .name X。hometown .id )
转 化 成 namedtuple 的 方 法 :
import json
from collections import namedtuple
data 二 “{f“name“: “John Smith“, “hometown“: {“name“: “New York“ , “id“: 12377 「
X = json.loads(data, object_hook=lambda d: namedtuple(‘X’, d.keys () )(*d.values()))
print X.name, X.hometown .name X。hometown .id
SimpleNamespace 内 部 只 是 对 字 典 类 型 做 了 封 装 , 因 此 上 面 这 个 转 换的 效 率 会 比 较 高 。
3 参 考 链 接
s How to convert JSON data into a Python object
s What is the difference between SimpleNamespace and empty
class definition2