实际上
并没有解决,没有到达希望的结果(虽然可以运行),哎!!!,终究是意难平。
前言
在python的json库,用json.load或者是json.loads对json文件操作,经常遇到的错误 json.decoder.JSONDecodeError: Extra data: line 2 column 1 (char 88)等,看过几位大佬对这个问题的解决,要么就是分成逐行读取,或者修改json文件,(比如把文件中的数据加个[])。
操作
json文件是这样的
{"phone": "du+vCzMexK9kEV9QwRq+Cw==\n", "passwprd": "250cf8b51c773f3f8dc8b4be867a9a02"}
{"phone": "cL7IcFajcDHsSIm2ULh3SA==\n", "passwprd": "99c5e07b4d5de9d18c350cdf64c5aa3d"}
{"phone": "dwSsZKFf2WYU+B78JmMc3A==\n", "passwprd": "9fe8593a8a330607d76796b35c64c600"}
如果我读取这个文件
import json
with open('1.json', 'r', encoding='utf-8')as f:
data=json.load(f)
print(data)
# 错误提示
# json.decoder.JSONDecodeError: Extra data: line 2 column 1 (char 88)
可能觉得有个“\n”会有影响,实际上去掉还是报错,只是(char 88)变成char(86)。。。
现在试试读取逐行读取,先只读一行试试
import json
with open('1.json', 'r', encoding='utf-8')as f:
data=json.loads(f.readline())
print(data)
#结果
#{'phone': 'du+vCzMexK9kEV9QwRq+Cw==', 'passwprd': '250cf8b51c773f3f8dc8b4be867a9a02'}
可以
逐行读取全部(再用for循环操作一下)
import json
with open('1.json', 'r', encoding='utf-8')as f:
data=f.readlines()
for i in data:
i=i.strip('\n')
# i之间会有\n
t=json.loads(i)
print(t)
# 这里面就好玩,
# 结果如下
"""
...
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
{'phone': 'du+vCzMexK9kEV9QwRq+Cw==', 'passwprd': '250cf8b51c773f3f8dc8b4be867a9a02'}
{'phone': 'cL7IcFajcDHsSIm2ULh3SA==', 'passwprd': '99c5e07b4d5de9d18c350cdf64c5aa3d'}
{'phone': 'dwSsZKFf2WYU+B78JmMc3A==', 'passwprd': '9fe8593a8a330607d76796b35c64c600'}
"""
# 首先还是会报错,但是有结果,如果加上try...except...,对代码操作
# 就可以没有了报错,而且还能运行,哈哈哈哈哈,好像解决了
# 当感觉在欺骗自己,没有意思。。。
"""
try:
t=json.loads(i)
print(t)
except Exception as e:
print('')
结果没有报错
"""
# 总之,不行,虽然可以运行。
pycharm在这个json文件中会有一个错误提示——JSON 标准只允许使用一个顶层值。
难道是json文件本身有问题,这个文件和其中的数据是通过open和json.dumps生成的,并不是自己写的。如果人为的修改这个文件,加个括号。变成了列表,在各个数据之间再加一个逗号。
pycharm在右上角打了个√。
改变后的json文件
[{"phone": "du+vCzMexK9kEV9QwRq+Cw==", "passwprd": "250cf8b51c773f3f8dc8b4be867a9a02"},
{"phone": "cL7IcFajcDHsSIm2ULh3SA==", "passwprd": "99c5e07b4d5de9d18c350cdf64c5aa3d"},
{"phone": "dwSsZKFf2WYU+B78JmMc3A==", "passwprd": "9fe8593a8a330607d76796b35c64c600"}]
操作一下
import json
with open('1.json', 'r', encoding='utf-8')as f:
data=json.load(f)
for i in data:
print(i)
#结果不用看,绝对没有报错
"""
{'phone': 'du+vCzMexK9kEV9QwRq+Cw==', 'passwprd': '250cf8b51c773f3f8dc8b4be867a9a02'}
{'phone': 'cL7IcFajcDHsSIm2ULh3SA==', 'passwprd': '99c5e07b4d5de9d18c350cdf64c5aa3d'}
{'phone': 'dwSsZKFf2WYU+B78JmMc3A==', 'passwprd': '9fe8593a8a330607d76796b35c64c600'}
"""
# 还是感觉不行
# 但就这样算了把
希望
总之就是说,如果文件是“正”版的json文件,读取的时候就不会报错。
那么。。。