Python 如何在从循环中附加数据时解析无效的json

Python 如何在从循环中附加数据时解析无效的json,python,json,Python,Json,我从循环中附加json对象,但问题是数据进入了无效的json格式。很抱歉,我的文件中有一百万个json对象,每次迭代时,我都会向其中添加更多记录 这是我的密码 for p_no in range(1,3): print(''.join([x,'?per_page=100&page={0}'.format(p_no)])) url = ''.join([x,'?per_page=100&page={0}'.format(

我从循环中附加json对象,但问题是数据进入了无效的json格式。很抱歉,我的文件中有一百万个json对象,每次迭代时,我都会向其中添加更多记录

这是我的密码

       for p_no in range(1,3):
            print(''.join([x,'?per_page=100&page={0}'.format(p_no)]))
            url = ''.join([x,'?per_page=100&page={0}'.format(p_no)])
            headers = {'Authorization': f'token {token}'}
            repo=requests.get(url,headers=headers,params=params).json()
            if repo:
                with open('data.json', 'a',encoding='utf-8') as f:
                    json.dump(repo, f, sort_keys=True, indent=4)
                continue
            else:
                break
当我读取json文件时,我得到了JSONDecode错误

这是我的json格式

[
    {
        "login": "asu",
        "login_name": "heylo"
    },
    {
        "login": "sr9",
        "login_name": "heylo"
    }
],
[
    {
        "login": "tokuda109",
        "login_name": "mojombo"
    },
    {
        "login": "svallory",
        "login_name": "mojombo"
    }
]

有没有一个有效的解决方案?

问题是它以列表的形式追加。您需要将它们放在一组
[
]

我会将它们结合起来,然后在最后写入文件。看看这是否有效:

jsonData = []
for p_no in range(1,3):
            print(''.join([x,'?per_page=100&page={0}'.format(p_no)]))
            url = ''.join([x,'?per_page=100&page={0}'.format(p_no)])
            headers = {'Authorization': f'token {token}'}
            repo=requests.get(url,headers=headers,params=params).json()
            if repo:
                jsonData += repo
                continue
            else:
                break


with open('data.json', 'w',encoding='utf-8') as f:
    json.dump(jsonData, f, sort_keys=True, indent=4)
另一个选项是对文件执行字符串替换。将“
”],[”
替换为“
”,“

使用
.replace()


您正在将多个有效的JSON对象转储到一个文件中,但您正在一个接一个地追加它们。这会使整个文件无效JSON

如果您的
repo
如下所示:

[
    {
        "login": "asu",
        "login_name": "heylo"
    },
    {
        "login": "sr9",
        "login_name": "heylo"
    }
],
[
    {
        "login": "tokuda109",
        "login_name": "mojombo"
    },
    {
        "login": "svallory",
        "login_name": "mojombo"
    }
]
[
    {
        "login": "asu",
        "login_name": "heylo"
    },
    {
        "login": "sr9",
        "login_name": "heylo"
    }
],
[
    {
        "login": "tokuda109",
        "login_name": "mojombo"
    },
    {
        "login": "svallory",
        "login_name": "mojombo"
    }
][
    {
        "login": "asu",
        "login_name": "heylo"
    },
    {
        "login": "sr9",
        "login_name": "heylo"
    }
],
[
    {
        "login": "tokuda109",
        "login_name": "mojombo"
    },
    {
        "login": "svallory",
        "login_name": "mojombo"
    }
]
然后将其直接一个接一个地附加到文件中多次,最后得到如下结果:

[
    {
        "login": "asu",
        "login_name": "heylo"
    },
    {
        "login": "sr9",
        "login_name": "heylo"
    }
],
[
    {
        "login": "tokuda109",
        "login_name": "mojombo"
    },
    {
        "login": "svallory",
        "login_name": "mojombo"
    }
]
[
    {
        "login": "asu",
        "login_name": "heylo"
    },
    {
        "login": "sr9",
        "login_name": "heylo"
    }
],
[
    {
        "login": "tokuda109",
        "login_name": "mojombo"
    },
    {
        "login": "svallory",
        "login_name": "mojombo"
    }
][
    {
        "login": "asu",
        "login_name": "heylo"
    },
    {
        "login": "sr9",
        "login_name": "heylo"
    }
],
[
    {
        "login": "tokuda109",
        "login_name": "mojombo"
    },
    {
        "login": "svallory",
        "login_name": "mojombo"
    }
]
正如您所看到的,这个不是有效的JSON。请看第20行。有一个
][
序列是错误的。除此之外,您的列表应该位于某种“容器”中—列表或对象中


解决方案是将
repo
对象附加到一个列表中,并将它们保存在内存中。循环完成后,在该列表中有几个
repo
,然后您可以立即将整个列表转储到一个文件中。这将生成正确的JSON文件。

您是否可以提供上面编辑的替换,以包括替换选项