重大版本调整:gewechat兼容。
This commit is contained in:
@@ -0,0 +1,131 @@
|
||||
# -*- 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}")
|
||||
Reference in New Issue
Block a user