在Python中将长缓冲区读入json.load()

时间:2017-10-06 05:38:13

标签: python json buffer

我正在尝试使用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()或尽可能使用适当的包。

0 个答案:

没有答案