# -*- 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}")