Files
abot/utils/json_converter.py
2025-04-22 11:17:03 +08:00

131 lines
3.5 KiB
Python

# -*- coding: utf-8 -*-
"""
JSON数据转换工具
用于将JSON数据转换为Python对象
"""
class DictObject:
"""将字典转换为对象,使得可以通过属性访问"""
def __init__(self, data):
for key, value in data.items():
if isinstance(value, dict):
setattr(self, key, DictObject(value))
elif isinstance(value, list):
setattr(self, key, [
DictObject(item) if isinstance(item, dict) else item
for item in value
])
else:
setattr(self, key, value)
def __repr__(self):
"""打印对象时的表示形式"""
attrs = ', '.join(f"{key}={repr(value)}" for key, value in self.__dict__.items())
return f"{self.__class__.__name__}({attrs})"
def to_dict(self):
"""将对象转换回字典"""
result = {}
for key, value in self.__dict__.items():
if isinstance(value, DictObject):
result[key] = value.to_dict()
elif isinstance(value, list):
result[key] = [
item.to_dict() if isinstance(item, DictObject) else item
for item in value
]
else:
result[key] = value
return result
def json_to_object(json_data):
"""
将JSON数据转换为Python对象
Args:
json_data: JSON字符串或字典
Returns:
DictObject: 转换后的Python对象
"""
import json
# 如果输入是字符串,则解析为字典
if isinstance(json_data, str):
data = json.loads(json_data)
else:
data = json_data
# 转换为对象
return DictObject(data)
# 使用示例
if __name__ == "__main__":
# 示例JSON数据
example_json = {
"ret": 200,
"msg": "操作成功",
"data": {
"friends": [
"tmessage",
"medianote",
"qmessage",
"qqmail",
"wxid_910acevfm2nb21",
"qqsafe",
"wxid_9299552988412",
"weixin",
"exmail_tool",
"wxid_mp05xmje0ctn22",
"wxid_09oq4f4j4wg912",
"wxid_6bfguz79h8n122",
"wxid_lyuq4hr4lrjq22",
"wxid_a1zqyljsrsdu12",
"wxid_lv3pb3zhna3522",
"wxid_k2biq6fuinsr22",
"wxid_ujredjhxz9y712",
"wxid_uwb7989u0jea12",
"wxid_in46ey732vxu12",
"wxid_3rvervwohj6921",
"wxid_4wkls7tu62ua12",
"wxid_g0bdknnotx2f12",
"wxid_ce5fgp0icb3y21",
"wxid_1482424825211",
"wxid_vw3p4f6jy7bm12",
"wxid_o2m8xm71c23522",
"wxid_bclqpc2ho6o412",
"wxid_98pjjzpiisi721",
"wxid_noq2wsn5c8h222"
],
"chatrooms": [
"2180313478@chatroom",
"14358945067@chatroom",
"17362526147@chatroom",
"11685224357@chatroom",
"17522822550@chatroom"
],
"ghs": [
"gh_7aac992b0363",
"gh_d7293b5f14f4",
"gh_f51ce3ef83a4",
"gh_7d20df86e26b",
"gh_69bfb92a3e43"
]
}
}
# 转换为对象
obj = json_to_object(example_json)
# 通过属性访问
print(f"返回码: {obj.ret}")
print(f"消息: {obj.msg}")
print(f"好友数量: {len(obj.data.friends)}")
print(f"第一个好友: {obj.data.friends[0]}")
print(f"第一个群聊: {obj.data.chatrooms[0]}")
# 转换回字典
dict_data = obj.to_dict()
print(f"转换回字典: {dict_data}")