当我通过scrapy学习网络爬虫时,将数据保存到json。我发现json.dumps()无法处理列表的值列表,如下所示:
def __init__(self):
self.file = codecs.open("mydata2.json","wb",encoding="utf-8")
def process_item(self, item, spider):
line = json.dumps(i,ensure_ascii=False) + '\n'
print(line)
self.file.write(line)
return item
def close_spider(self,spider):
self.file.close()
它不起作用。然后我修改代码
def __init__(self):
self.file = codecs.open("mydata2.json","wb",encoding="utf-8")
def process_item(self, item, spider):
i = dict(item)
for key in i.keys():
i[key] = str(i[key])
print(i)
line = json.dumps(i,ensure_ascii=False) + '\n'
print(line)
self.file.write(line)
return item
def close_spider(self,spider):
self.file.close()
一切都很好。那怎么回事?
答案 0 :(得分:1)
也许原始类型中有一些数据无法序列化。但是,如果将all转换为字符串,则可以将其序列化。
您可以定义自定义JsonEncoder来解决此问题。
要使用自定义JSONEncoder子类(例如,重写default()方法以序列化其他类型),请使用cls kwarg指定它;否则使用JSONEncoder。