使用JSON转储时对象不是JSON可序列化的

时间:2019-06-02 21:31:19

标签: python json python-asyncio aiohttp

我正在使用异步方法返回对象数组,并且收到“ TypeError:不是JSON可序列化的”错误,并且不确定如何更正。这是我的代码:

async def fetch(session, url):
    async with session.get(url) as response:
        return await response.text

class NewStoriesHandler(tornado.web.RequestHandler):
    async def get(self):
        self.set_header("Access-Control-Allow-Origin", "*")
        response = requests.get(
        "https://hacker-news.firebaseio.com/v0/newstories.json?print=pretty")
        data = response.json()
        story_list = []
        async with aiohttp.ClientSession() as session:
           for url in data:
               story_list.append(fetch(session, url))

        print(story_list)
        self.write(json.dumps(story_list, default=json_util.default))
        self.finish()

我试图将Json返回到该方法,但未成功,我不确定它期望返回什么。循环为每个调用返回一个对象,并将其附加到数组。

1 个答案:

答案 0 :(得分:1)

在我看来,您正在将协例程对象添加到列表中,而不是协程的结果。

我认为您应该await每次抓取,然后再将它们添加到列表中。由于我当前正在旅行,所以我无法运行代码,但是您可能还需要一种策略来等待每个任务开始执行。