如何在Python中加载json文件时替换不需要的字符[]?

时间:2019-04-09 10:12:22

标签: python json

我正在尝试使用以下代码加载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”是最后一个。

如果可以的话,请先谢谢您。

3 个答案:

答案 0 :(得分:2)

使用str.replace()

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
                                    ],

在第一个方括号闭合的地方,或者至少在应该闭合的地方,我看不到任何地方。