关于json库中的load或loads方法遇到问题的解决

实际上

并没有解决,没有到达希望的结果(虽然可以运行),哎!!!,终究是意难平。

前言

在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文件,读取的时候就不会报错。

那么。。。

大佬的文章

你可能感兴趣的:(python)