我刚开始编写Python。我想用Scrapy创建一个机器人,它显示了TypeError:当我运行项目时,类型为“bytes”的对象不是JSON可序列化的。
第一个
追溯:
TypeError: Object of type 'bytes' is not JSON serializable
2017-06-23 01:41:15 [scrapy.core.scraper] ERROR: Error processing {'desc': [b'\x
e4\xbd\xbf\xe7\x94\xa8 XSLT \xe6\x98\xbe\xe7\xa4\xba XML'],
'link': [b'/xml/xml_xsl.asp'],
'title': [b'XML XSLT']}
Traceback (most recent call last):
File
"c:\users\administrator\appdata\local\programs\python\python36\lib\site-p
ackages\twisted\internet\defer.py", line 653, in _runCallbacks
current.result = callback(current.result, *args,**kw)
File "D:\LZZZZB\w3school\w3school\pipelines.py", line 19, in process_item
line = json.dumps(dict(item)) + '\n'
File
"c:\users\administrator\appdata\local\programs\python\python36\lib\json\_
_init__.py", line 231, in dumps
return _default_encoder.encode(obj)
File
"c:\users\administrator\appdata\local\programs\python\python36\lib\json\e
ncoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File
"c:\users\administrator\appdata\local\programs\python\python36\lib\json\e
ncoder.py", line 257, in iterencode
return _iterencode(o, 0)
File
"c:\users\administrator\appdata\local\programs\python\python36\lib\
json\encoder.py", line 180, in default
o.__class__.__name__)
TypeError: Object of type 'bytes' is not JSON serializable
4条答案
按热度按时间v8wbuo2f1#
您将自己创建这些
bytes
对象:每个
t.encode()
、l.encode()
和d.encode()
调用都创建一个bytes
字符串。不要这样做,让它以JSON格式来序列化这些字符串。接下来,您会犯其他几个错误;你在不需要的地方编码太多了。把它留给
json
模块和open()
调用返回的 standard file对象来处理编码。您也不需要将
items
列表转换为字典;它已经是一个可以直接进行JSON编码的对象:我猜你学习了一个假设使用Python 2的教程,而你使用的是Python 3。它不仅是为过时的Python版本编写的,而且如果它提倡
line.decode('unicode_escape')
,它也会教你一些非常坏的习惯,这些习惯会导致难以跟踪的bug。vc6uscn92#
简单地写
<variable name>.decode("utf-8")
。例如:
z4iuyo4d3#
今天我处理了这个问题,我知道我有一些编码为bytes对象的东西,我试图用
json.dump(my_json_object, write_to_file.json)
将其序列化为json。在本例中,my_json_object
是我创建的一个非常大的json对象,所以我有几个dict、列表和字符串要查看,以找到仍然是bytes格式的内容。我最后的解决方法是:
write_to_file.json
将包含导致问题的字节对象之前的所有内容。在我的特殊情况下,这是一条通过
我首先在write_to_file.json的帮助下找到了这个错误,然后将其更正为:
ccgok5k54#
我在处理图像数据时也遇到了同样的错误。在Python中,在客户端,我阅读一个图像文件并将其发送到服务器。服务器将二进制数据解码为字节。因此,我将字节数据转换为字符串,解决了这个错误。