json.dumps()无法转换值为list的dict

时间:2017-08-20 02:25:28

标签: python json scrapy

当我通过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()

一切都很好。那怎么回事?

1 个答案:

答案 0 :(得分:1)

也许原始类型中有一些数据无法序列化。但是,如果将all转换为字符串,则可以将其序列化。

您可以定义自定义JsonEncoder来解决此问题。

  

要使用自定义JSONEncoder子类(例如,重写default()方法以序列化其他类型),请使用cls kwarg指定它;否则使用JSONEncoder。