TypeError:“标签”类型的对象不是 JSON 可序列化的

Posted

技术标签:

【中文标题】TypeError:“标签”类型的对象不是 JSON 可序列化的【英文标题】:TypeError: Object of type 'Tag' is not JSON serializable 【发布时间】:2017-12-17 22:34:04 【问题描述】:

我正在尝试创建一个JSON 对象并使用python 将其发送到Firebase Database,但是当我这样做时,我得到:

TypeError: Object of type 'Tag' is not JSON serializable

这是我的代码:

data = 'address': address,
    'name': name
   

print(type(data))
sent = json.dumps(data)
result = firebase.post("/tHouse/houseTest", sent)  

json.dumps(data) 有问题,因为这里指出了错误。运行print(type(data)) 会返回<class 'dict'>

nameaddress 也是预先设置的

【问题讨论】:

addressname有哪些类型? with address = "address", name = "name" 你的代码可以正常工作,直到 json.dumps(data) 添加完整的回溯,以便有人可以提供帮助 nameString,但address 似乎是'bs4.element.Tag' ...我可以用str(address) 来解决这个问题吗? 【参考方案1】:

作为bs4.element.Tagaddress不能序列化为JSON。

你如何处理这取决于你想在你的数据库中存储标签的哪一部分。如果您只是在 Tag 上调用 str(),则输出将包含 XML/html 标记。如果您希望标签中包含文本,请访问 .text 属性,例如

from bs4 import BeautifulSoup

soup = BeautifulSoup('<address>1 Some Street Somewhere ABC 12345</address>')
address = soup.address

>>> type(address)
<class 'bs4.element.Tag'>
>>> str(address)
'<address>1 Some Street Somewhere ABC 12345</address>'
>>> address.text
u'1 Some Street Somewhere ABC 12345'

所以这可能是你需要做的:

data = 'address': address.text, 'name': 'Some One'
>>> json.dumps(data)
'"name": "Some One", "address": "1 Some Street Somewhere ABC 12345"'

【讨论】:

【参考方案2】:

您可以通过遍历找到的项目并找到您要查找的属性来转换数据。

例如,如果我们有一个图像列表(带有标签)。我们可以遍历它并创建一个列表,我们将在其中仅附加带有 URL 的字符串。

final = []
for i in images:
    image = i.attrs['src']
    final.append(image)

【讨论】:

以上是关于TypeError:“标签”类型的对象不是 JSON 可序列化的的主要内容,如果未能解决你的问题,请参考以下文章

Python 错误:TypeError:'Timestamp' 类型的对象不是 JSON 可序列化的'

Celery EncodeError(TypeError('响应类型的对象不是 JSON 可序列化的'))

TypeError:mappingproxy 类型的对象不是 JSON 可序列化的

TypeError:X 类型的对象不是 JSON 可序列化的

TypeError:“int32”类型的对象不是 JSON 可序列化的

Flask API TypeError:“响应”类型的对象不是 JSON 可序列化的