我使用telethon包,用于连接和从电报中获取数据。 我想将Message对象转换为有效的JSON。 例如,我从telethon中的一个API获取此对象:
{
Message: {
via_bot_id: None,
entities: [],
out: None,
post: True,
from_id: None,
message: "hi everybody",
id: 71,
media_unread: None,
reply_markup: None,
fwd_from: {
channel_id: 1119999790,
channel_post: 2,
date: 2017 - 09 - 04 15: 43: 48,
from_id: None
},
reply_to_msg_id: None,
edit_date: None,
to_id: {
channel_id: 1099583379
},
views: 2,
mentioned: None,
date: 2017 - 09 - 05 09: 28: 46,
media: None,
silent: None
} }
这是我最喜欢的结果:
{
"Message": {
"via_bot_id": "None",
"entities": [],
"out": "None",
"post": "True",
"from_id": "None",
"message": "hi everybody",
"id": 71,
"media_unread": "None",
"reply_markup": "None",
"fwd_from": {
"channel_id": 1119999790,
"channel_post": 2,
"date": "2017 - 09 - 04 15: 43: 48",
"from_id": "None"
},
"reply_to_msg_id": "None",
"edit_date": "None",
"to_id": {
"channel_id": 1099583379
},
"views": 2,
"mentioned": "None",
"date": "2017 - 09 - 05 09: 28: 46",
"media": "None",
"silent": "None"
}}
有没有办法在Python中进行转换?
答案 0 :(得分:1)
例如,您可以将每个对象递归地转换为 dict:
def has_to_dict(obj):
method = getattr(obj, "to_dict", None)
return callable(method)
def to_dict_req(obj):
res = {}
if has_to_dict(obj):
for key, value in obj.to_dict().items():
if has_to_dict(value):
value = to_dict_req(value)
else:
value = str(value)
res[key] = value
return res
else:
return str(obj)
答案 1 :(得分:0)
我用这种方式解决了我的问题
我希望它对你也有用
例如,我得到channel
个对象并将其转换为JSON。
index.py
import json
from telethon import TelegramClient
from telethon.tl.functions.channels import GetFullChannelRequest
from telethon.tl.types import ChannelParticipantsSearch
from helpers import date_format
api_id = XXXXX
api_hash = 'XXXXXXXXXXXXXXXXXXXXXX'
phone_number = '+98XXXXXXXXXXX'
################################################
channel_username = 'tehrandb'
################################################
client = TelegramClient('session_name',
api_id,
api_hash)
assert client.connect()
if not client.is_user_authorized():
client.send_code_request(phone_number)
me = client.sign_in(phone_number, input('Enter code: '))
# ---------------------------------------
my_filter = ChannelParticipantsSearch('')
all_participants = []
while_condition = True
# ---------------------------------------
channel = client(GetFullChannelRequest(channel_username))
channel_dict = channel.to_dict()
json = json.dumps(channel_dict,default=date_format)
和helpers.py
import datetime
def date_format(message):
"""
:param message:
:return:
"""
if type(message) is datetime:
return message.strftime("%Y-%m-%d %H:%M:%S")