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'>
。
name
和 address
也是预先设置的
【问题讨论】:
address
和name
有哪些类型?
with address = "address"
, name = "name"
你的代码可以正常工作,直到 json.dumps(data)
添加完整的回溯,以便有人可以提供帮助
name
是String
,但address
似乎是'bs4.element.Tag'
...我可以用str(address)
来解决这个问题吗?
【参考方案1】:
作为bs4.element.Tag
,address
不能序列化为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 可序列化的