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

我最近一直在尝试解析一个包含一些数据的json文件。以下结构中的数据:

{
"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号怎么了?
我已经在哪里找你了