这几天在爬区块链的数据,需要进一步做处理。在爬取过程中,遇到了问题。
问题描述
当我需要读取一个字典结构的数据,该数据存在json
文件中,类似于如下所示数据。
{
"hash160": "6c6be098a685e95270812137e8b01b1ae7d8ffd0",
"address": "1AtHDAdBEw6bUtnjYQbbYjVKvSmRrdmomY",
"n_tx": 2,
"total_received": 60451790,
"total_sent": 60451790,
"final_balance": 0,
}
我使用jupyter notebook
运行如下代码,读 该文件中的数据:
with open('xxx.json','r') as f:
lines = json.loads(f.read())
程序抛出异常:
Extra data: line 1 column 225215 (char 225214)
解决办法
发生以上错误原因是json
只能读取一个文档对象。刚才读的字典数据在文件中的格式不正确,导致无法正确读数据。解决办法有两个:
方法一:单行读取文件
-
适用于有多行json,行与行之间没有关联的情况
with open(‘xxx.json’,‘r’) as f:
for line in f.readlines():
dic = json.loads(line)
方法二:保存数据源的时候,格式化为一个对象
-
适用于普遍情况;将这个文件写成一个大的json
with open(‘address.json’,‘a’) as f:
for line in address:
#循环,写入多条记录;最外层格式化
f.write(’{“address”:[’)
#将每条记录以json格式写入f
f.write(json.dumps(line,ensure_ascii=False,indent=2 ) + ‘\n’)
f.write(’,’)
f.write(’]}’) -
读取时再作为一个文档对象处理
with open(‘address.json’,‘a’) as f:
str_json = json.loads(f.read())
读写json文件函数
-
写json
一般都是方法二提到的json格式,整个文件中的数据是一个大json。函数如下f.write(json.dumps())
json.dumps()
函数是将一个Python数据类型列表进行json格式的编码。可以理解为:json.dumps()
函数是将字典转化为字符串
-
读json
函数如下json.loads(f.read())
json.loads()
函数是将json格式数据转换为字典。可以理解为:json.loads()
函数是将字符串转化为字典