前言
背景:我在爬虫爬取数据之后将其保存为json格式数据,而后进行数据清洗,不过在做数据清洗加载数据时,遇到了如图的问题。
看到报错原因为decode,首先猜测是否是因为编码格式诸如‘utf-8’之类的问题,尝试了一下’utf-8’,'utf-16’仍然报错,遂放弃。于是想如果不是因为编码问题,可能问题是因为保存的格式有问题,查看最终保存在json文件格式的数据如下图所示:
可以看到截图里面出现了一个红色灯泡,因此保存的文件格式应该有很大问题,首先需要弄明白json文件是怎样保存数据的,例如csv文件是逗号分隔值文件(分割符号也可以不是逗号)。
Json可以保存哪种数据
根据百度百科中查询可知:
Json百度百科链接
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
其中Json支持的基本类型如下:
对象(字典),数组(列表),字符串,数字,布尔值,空值
百度百科中介绍如下图:
因此报这样的错,是因为我们读取的根本就不是json文件格式,在写入文件中我是一行一行写入数据,每一行的数据格式如下图,
{"name": "Tom", "age": 12}
每一行都是python字典格式数据,而在json文件中被认为是对象,因此在前面写入时,没有出现问题,但是在读入数据时,文件中的数据不再是json所支持的文件格式。
解决办法
在读入json文件时,确保想要读取的数据是python中字典格式或者列表格式,值得注意的一点是json对象中所有键都必须是字符串。
一个简单的示例如下:
import json
dic2 ={'name':'Jarry','age':15,1:'s'}
filename ='test.json'
print(dic2)
with open(filename,'w') as f_obj:
json.dump(dic2,f_obj)
其中在pycharm中输出如下:
而在json文件中
可以看到当以json文件格式保存时,键为int类型的转变成了字符串类型。