You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复‘Object of type Tag is not JSON serializable’错误?

解决JSON序列化Tag类型对象的问题

你遇到的问题核心是urls、titles或views中包含了Tag类型的对象,JSON模块默认无法序列化自定义/第三方类实例。以下是具体的解决思路和方案:

1. 先明确Tag对象的本质

首先要确定你的Tag是什么类型:

  • 如果是自定义的Tag类:直接提取它的核心属性,转成字典或基础类型。
  • 如果是第三方库的Tag(比如BeautifulSoup的Tag实例):提取它的文本内容或HTML属性(比如tag.text取文本、tag['href']取链接)。

2. 提前转换所有Tag对象到可序列化类型

在构建Video字典前,先把包含Tag的变量转成JSON支持的类型:

import json

# 假设urls是含BeautifulSoup Tag的列表,提取链接属性
processed_urls = [tag['href'] for tag in urls]
# 假设titles是含Tag的列表,提取文本内容
processed_titles = [tag.text.strip() for tag in titles]
# 如果views是Tag对象,转成整数类型
processed_views = int(views.text.strip()) if isinstance(views, Tag) else views

Video = {
    'url': processed_urls,
    'title': processed_titles,
    'views': processed_views
}

with open("Video.json", "w") as write_file:
    json.dump(Video, write_file)

3. 用default参数处理全局序列化(适合零散的Tag对象)

如果Tag对象分散在多个结构中,可以写通用的序列化函数,传给json.dump的default参数:

import json

def serialize_tag(obj):
    # 匹配自定义Tag类,返回其属性字典
    if hasattr(obj, 'url') and hasattr(obj, 'title'):
        return {'url': obj.url, 'title': obj.title}
    # 匹配BeautifulSoup的Tag,返回文本
    elif str(type(obj)).endswith('bs4.element.Tag'):
        return obj.text.strip()
    # 其他未知类型抛出原错误
    raise TypeError(f"Object of type {type(obj).__name__} is not JSON serializable")

Video = {
    'url': urls,
    'title': titles,
    'views': views
}

with open("Video.json", "w") as write_file:
    json.dump(Video, write_file, default=serialize_tag)

你之前尝试default参数没解决,大概率是因为序列化函数没有正确匹配你的Tag类型,或者没有提取到正确的可序列化属性——要确保函数里的判断逻辑能准确识别你的Tag对象,并返回字符串、数字、列表、字典这类JSON支持的类型。

内容的提问来源于stack exchange,提问作者Abhay Lakra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 23:35:09