Json数据对象:仅当前一条消息由同一用户发送时,如何连接字符串(消息)?
我最近一直在尝试解析一个包含一些数据的json文件。以下结构中的数据:Json数据对象:仅当前一条消息由同一用户发送时,如何连接字符串(消息)?,json,python-3.x,string,parsing,Json,Python 3.x,String,Parsing,我最近一直在尝试解析一个包含一些数据的json文件。以下结构中的数据: { "participants": [ {"name": "Lana"}, {"name": "Adam"}], "messages": [ { "sender_name": "Adam", "timestamp_ms": 1579638034407, "content": "love you", "type": "Generic"}, {"sender_name": "Lana","timestamp_ms
{
"participants": [
{"name": "Lana"},
{"name": "Adam"}],
"messages": [
{ "sender_name": "Adam", "timestamp_ms": 1579638034407, "content": "love you", "type": "Generic"},
{"sender_name": "Lana","timestamp_ms": 1579634379711,"content": "love you too, baby","type": "Generic"},
{"sender_name": "Adam","timestamp_ms": 1579634359503,"content": "Thanks again baby","type": "Generic"},
{ "sender_name": "Adam", "timestamp_ms": 1579638034407, "content": "see you very soon", "type": "Generic"},
{"sender_name": "Adam","timestamp_ms": 1579634379711,"content": "have fun","type": "Generic"},
{"sender_name": "Lana","timestamp_ms": 1579634359503,"content": "you too love","type": "Generic"},
{ "sender_name": "Adam", "timestamp_ms": 1579638034407, "content": "bye bye", "type": "Generic"},
{"sender_name": "Lana","timestamp_ms": 1579634379711,"content": "Im already missing you","type": "Generic"},
{"sender_name": "Adam","timestamp_ms": 1579634359503,"content": "me too","type": "Generic"},
]
}
我想得到的是:
0 None
1 love you
2 love you too, honey
5 Thanks again baby . see you very soon . have fun
6 you too, love
7 bye bye
我得到的是:
0 love you
1 love you too, baby
2 Thanks again baby
3 Thanks again baby . see you very soon
4 Thanks again baby . see you very soon . have fun
5 you too, love
6 bye bye
我用来解析Json对象的代码:
def parse_json(file_obj):
previous_participant = None
previous_message = None
for i, m in enumerate(file_obj['messages']):
if 'content' in m:
if previous_participant == m['sender_name'] and previous_message != None:
previous_message = previous_message +" . "+ m['content']
else:
previous_participant = m['sender_name']
previous_message = m['content']
print(i, previous_message)
pass
parse_json(xy)
如果用户在一行中发送多条消息,它将继续返回前一条消息+当前消息。我知道我做错了,但我似乎还没有弄明白。非常感谢。多谢各位
编辑:我使用了一个列表对象来保存消息,出于性能原因,我试图避免这样做,但我想不出更好的选择
下面是代码:
def parse_json(file_obj):
previous_participant = None
previous_message = None
chat = []
for i, m in enumerate(file_obj['messages']):
if 'content' in m:
if previous_participant == m['sender_name'] and previous_message != None:
previous_message = previous_message +" . "+ m['content']
else:
chat.append(previous_message)
previous_participant = m['sender_name']
previous_message = m['content']
pass
print(i, chat)
虽然效率不高,但目前仍有效。谢谢。对于您的编号模式,没有一种简单、甜蜜的方法可以做到这一点。如果去掉这些数字,可以删除此代码末尾的整个
for
循环。这就是说,这似乎得到了您的输出。虽然我不明白您的预期输出中的输出3和4发生了什么
def get_messages_by_name(data):
# An endless cycle of participants
participants = cycle(d['name'] for d in data['participants'])
# Pull out the names and messages from the JSON
messages = [(d['sender_name'], d['content']) for d in data['messages']]
# Group the messages by the sender name.
messages_per_sender = [
(grouped_by_name, ', '.join([tup[1] for tup in tups]))
for grouped_by_name, tups in
groupby(messages, lambda m: m[0])
]
# Now we need to do the numbering.
result = []
for message_name, message in messages_per_sender:
current_name = next(participants)
while current_name != message_name:
result.append(None)
current_name = next(participants)
result.append(message)
for index, message in enumerate(result):
print(index, message)
输出:
0 None
1 love you
2 love you too, baby
3 Thanks again baby, see you very soon, have fun
4 you too love
5 bye bye
6 Im already missing you
7 me too
您期望的输出似乎与JSON中的数据不匹配。3号和4号怎么了?
我已经在哪里找你了
?