【问题标题】:Object Is Not JSON Serializable When Using JSON Dumps使用 JSON 转储时,对象不是 JSON 可序列化的
【发布时间】:2019-06-02 21:31:19
【问题描述】:

我正在使用异步方法返回一个对象数组,我收到“TypeError: is not JSON serializable”错误,我不知道如何纠正它。这是我的代码:

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 返回到该方法,但没有成功,我不确定它期望返回什么。循环为每次调用返回一个对象并将其附加到数组中。

【问题讨论】:

  • 请提供print(story_list)行的输出
  • 意思是它所说的——如果一个对象包含 Python 不知道如何转换为 JSON 的东西,你会得到那个错误。除非您告诉我们 fetch(session, url) 返回的内容,否则我们不知道如何解决。
  • 它返回一个对象数组
  • 什么特定类型的对象?有些对象是可序列化的,有些则不是。
  • 您正在运行print(story_list),但您没有向我们展示print() 输出的内容。这是非常相关的信息。

标签: python json python-asyncio aiohttp


【解决方案1】:

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

我认为在将它们添加到列表之前,您应该 await 每次提取。我无法运行代码,因为我目前正在旅行,但您可能还需要一个策略来在等待每个任务之前启动它的执行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 2013-05-23
    • 2015-02-24
    • 2014-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多