我正在尝试使用以下代码加载json文件:
with open('tweets_036.jsonl') as json_file:
data = json.load(json_file)
但是出现以下错误消息:
JSONDecodeError: Extra data: line 24289 column 2 (char 1088180)
当我查看文件/行24289时,我可以看到[]引起了问题:
"favorited": false
}
][
{
"retweeted": false,
与前几行相比,应该是:
"favorited": false
},
{
"retweeted": false,
仅供参考,数据与tweet有关,“ reweeted”通常是新tweet的第一个元素,而“ favorited”是最后一个。
如果可以的话,请先谢谢您。
答案 0 :(得分:2)
tweets_036.jsonl :
const getCategories = async () => {
const { data: categories } = await axios.get(`api/Categories/GetCategories`);
return categories;
};
const getSubCategories = async catId => {
const { data: subCategories } = await axios.get(`../api/SubCategories/GetSubCategories?catId=${catId}`);
return subCategories;
};
因此:
[
{
"favorited": false
}
][
{
"retweeted": false
}
]
输出:
import json
with open('tweets_036.jsonl', 'r') as file:
content = file.read()
clean = content.replace('][', ',') # cleanup here
json_data = json.loads(clean)
print(json_data)
答案 1 :(得分:1)
您尝试一下:python的 re.sub
它使用以下格式:
result = re.sub(pattern, replacement, input)
因此,在您的情况下,将是这样的:
clean_data = re.sub('][', '', data)
答案 2 :(得分:0)
不久前发生过同样的问题。出于某种原因,twitter返回列表中的多个json结构,但未用逗号分隔列表,因此将[ ]
之间的每个json元素都添加到了实际列表中。因此,您将获得一个json结构化数据列表。这是我前一段时间使用的解决方案:
import json
filename='C:/tweets_043.json'
with open(filename) as json_file:
data_str = json_file.read()
data_str = data_str.split('[',1)[-1]
data_str = data_str.rsplit(']',1)[0]
data_str = data_str.split('][')
clean_data = []
need_cleaning = False
for i, each in enumerate(data_str):
if need_cleaning == True:
hold_string = hold_string + '][' + each
if each.strip()[-1] != '}':
continue
else:
clean_data.append(hold_string.strip())
need_cleaning = False
continue
if each.strip()[-1] != '}':
hold_string = data_str[i]
need_cleaning = True
continue
else:
clean_data.append(each.strip())
need_cleaning = False
data = []
error = []
for jsonStr in clean_data:
jsonStr = '[' + jsonStr + ']'
try:
temp_data = json.loads(jsonStr.strip())
for each in temp_data:
data.append(each)
except:
print ('error')
error.append(jsonStr)
分析除那一项(您还在注释中指出的)之外的所有内容。问题出在哪里:
"large": {
[{
"is_quote_status": false,
"filter_level": "low",
"in_reply_to_screen_name": "Huawei",
"display_text_range": [
8,
53
],
在第一个方括号闭合的地方,或者至少在应该闭合的地方,我看不到任何地方。