字符串消息类型引发TypeError:字符串索引必须为整数

问题描述 投票:0回答:1

我有这个Python应用程序:

import json

class MessageHandler():

    def get_request_id(self, message):
        request_id = None
        message = json.dumps(message)
        print("MESSAGE %s" % message)
        if 'key' in message and 'payload' in message:
            request_id = message['key']['request_id']
        else:
            request_id = message['request_id']
        return request_id

    def get_message(self, message):
        message = json.dumps(message)
        print("MESSAGE %s" % message)
        if 'key' in message and 'payload' in message:
            message = message['payload']
        else:
            message = message
        return message


def main():

    message = "{'payload': {u'event_type': u'Object:Delete', u'format': u'2.0', u'bucket_uuid': u'a352600c-17f8-401b-ab49-7df0ca9fc4ea', u'system_uuid': u'bd607bc3-4f60-77c4-0180-9dd4115ec942', u'object_length': u'22', u'object_name': u'init_put_test0', u'bucket_name': u'container-acb77190-a4ee-47e3-a78b-8bc7cb894a0c', u'request_id': u'e25e9589-6520-437e-83e1-e0d12bd67c16', u'request_time': u'2020-01-16T23:11:36.105Z'}, 'key': {u'notification_id': u'7e13cb05-488a-47d0-a433-7bwwd33605b8', u'request_id': u'ddo34589-6120-412e-83a1-d12d2bd67c16'}}"

    message_handler = MessageHandler()

    request_id = message_handler.get_request_id(message)
    print("Request ID: %s" % request_id)

    request_id = message_handler.get_message(message)
    print("Message: %s" % request_id)


if __name__ == "__main__":
    main()

当我运行它时,我得到这个:

Traceback (most recent call last):
  File "/Users/me/PycharmProjects/Helper/message_handler.py", line 92, in <module>
    main()
  File "/Users/me/PycharmProjects/Helper/message_handler.py", line 81, in main
    kafka_request_id = message_handler.get_request_id(kafka_message_2)
  File "/Users/me/PycharmProjects/Helper/message_handler.py", line 10, in get_request_id
    request_id = message['key']['request_id']
TypeError: string indices must be integers
MESSAGE "{'payload': {u'event_type': u'Object:Delete', u'format': u'2.0', u'bucket_uuid': u'a352600c-17f8-401b-ab49-7df0ca9fc4ea', u'system_uuid': u'bd607bc3-4f60-77c4-0180-9dd4115ec942', u'object_length': u'22', u'object_name': u'init_put_test0', u'bucket_name': u'container-acb77190-a4ee-47e3-a78b-8bc7cb894a0c', u'request_id': u'e25e9589-6520-437e-83e1-e0d12bd67c16', u'request_time': u'2020-01-16T23:11:36.105Z'}, 'key': {u'notification_id': u'7e13cb05-488a-47d0-a433-7bwwd33605b8', u'request_id': u'ddo34589-6120-412e-83a1-d12d2bd67c16'}}"

我怀疑我需要将message转换为可以读取密钥的格式,但是我该怎么做?

python json typeerror
1个回答
0
投票

json.dumps(message)将python对象转换为json字符串。您要做的是json.loads(message),此方法将字符串转换为python对象。

© www.soinside.com 2019 - 2024. All rights reserved.