我正在尝试使用json
包将缓冲区(长度为2260个字符)加载到Python对象中。
身体来自rabbitmq消息:
def process_message(body, message):
print("The body is {}".format(body))
body_as_string = ""
for char in body:
body_as_string += char
json_loaded_obj = json.loads(body_as_string)
...
def handle(self, *args, **options):
new_conn = Connection(RABBIT_URL, heartbeat=10)
exchange = Exchange(EXCHANGE_NAME, type="direct")
queue = Queue(name=QUEUE_NAME, exchange=exchange, routing_key=ROUTING_KEY)
consumer = Consumer(new_conn, queues=queue, callbacks=[process_message], accept=["text/plain"])
我最近尝试了一些事情:
ipdb> body
<read-only buffer ptr 0x2988c07, size 2260 at 0x7f56c4ee8930>
ipdb> with open(body) as dadbod: conversion = json.load(dadbod)
*** IOError: [Errno 36] File name too long: <read-only buffer ptr 0x2988c07, size 2260 at 0x7f56c4ee8930>
将缓冲区作为文件对象加载失败,它的行为与我猜的文件不同:
Python TypeError: expected string or buffer
当我尝试时,这个json.decoder
的答案没有起作用,这似乎与我的问题不同。
我只想获取缓冲区并将其JSON转换为Python对象。这有效:
body_as_string = ""
for char in body:
body_as_string += char
但是,这很难看,这个测试很严重,我想要一个干净的解决方案。我更愿意学习如何使用json.JSONDecoder()
或尽可能使用适当的包。