Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python json.dumps()无法转换值为list的dict_Python_Json_Scrapy - Fatal编程技术网

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

Python json.dumps()无法转换值为list的dict,python,json,scrapy,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(li

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

一切都很好,进展如何

可能原始类型中有一些数据无法序列化。但如果您将all转换为string,则可以序列化它

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

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


它以什么方式不起作用?你有错误吗?意外输出?另外,在第一个示例中,您似乎引用了一个名为
i
的变量,该变量不存在。