忽略JSONL文件中的无效文档

时间:2018-05-26 14:20:41

标签: python json

我有一个文件,每行有一个JSON文档;但是,其中一些文档格式错误,无法正确解析。

我目前的代码如下:

def load_tweets(file):
    with open(file, 'r', encoding="UTF-8") as f:
        tweets = (json.loads(line) for i, line in enumerate(f.readlines()))
    return tweets

...然后我在推文中循环收集字段。 我知道在某些领域有双引号或其他令人讨厌的字符。我试过.... 1)手动搜索有问题的行,但文件很大2)循环中的try catch结构但是在尝试启动循环时出现错误:

for myfile in myfiles : 
    tweets = load_tweets(myfile)
    for t in tweets:
        print (t['id'], "\n")
        try:
            #print (t['id'])
            data['id'].append(t['id'])
(...)

3)解码/编码但没有任何作用。

JSONDecodeError: Expecting ':' delimiter: line 1 column 5717 (char 5716)

我正在寻找一种方法,只是在出现格式错误的JSON时跳过行或删除行。我很乐意保留它,但我可以放弃它们。

我正在使用Python 3.4。 所有的帮助将不胜感激! :)

我的代码改编自here

1 个答案:

答案 0 :(得分:1)

def load_tweets(file):
    with open(file, 'r', encoding="UTF-8") as f:
        for line in f:
            try:
                yield json.loads(line)
            except JSONDecodeError:
                pass

然后其余的代码可以是相同的。