Python 如何在从循环中附加数据时解析无效的json
我从循环中附加json对象,但问题是数据进入了无效的json格式。很抱歉,我的文件中有一百万个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(
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文件。您是否可以提供上面编辑的替换,以包括替换选项