Object of type * is not JSON serializable错误是我在写爬虫的时候遇到的一个问题
引起函数
json.dumps()函数引起的
在处理数据的时候使用json.dumps()函数将dict(字典)数据类型转化为json数据的时候,促发了这个错误。
原因:
原因是转化的dict(字典)数据中有value数据没处理好,字典的值中包含了generator、byte(字节)等数据的时候就会触发,而包含字节这类数据是无法转化为json的。
解决:
所以找到自己转换的数据,找到对应的数据转换好就可以解决了。
如果存在比较多的问题数据,也可以自己写函数去处理,遍历字典中的值,如果存在byte(字节)数据就把他转成想要的数据。
json.dumps()函数有一个cls参数,默认值是None。看源码的翻译,参数的作用应该是可以自定义JSONEncoder子类来序列化其他类型。
cls参数注释原文:
To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the
``.default()`` method to serialize additional types), specify it with
the ``cls`` kwarg; otherwise ``JSONEncoder`` is used.
参考代码:
# -*- coding: utf-8 -*-
import json
def conversion_type(data):
"""
通过isinstance()判断data是否是bytes类型数据 是的话就转为str类型
:param data: 传入的数据
:return:
"""
if isinstance(data, bytes):
return str(data, encoding='utf-8')
return json.JSONEncoder.default(data)
data = '数据'
# json.dumps(data)
# 修改为:
json.dumps(data,cls=conversion_type,indent=4)