Добавление в пустой файл JSON в python

#python #arrays #json #python-2.7

#питон #массивы #json #python-2.7

Вопрос:

У меня уже есть файл JSON, который я анализирую с помощью Python 2.7, и я хочу сбросить проанализированные данные в другой пустой файл JSON. Я использую цикл for для анализа данных из старого файла JSON, и в то же время в рамках этого цикла я хочу добавить к этому новому файлу JSON. Мой исходный JSON-файл имеет форму массива JSON. Примечание: Новый файл JSON будет иметь те же ключи, что и старый файл JSON, т.е. Я просто разбираю данные в соответствии с условием if, а затем вставляю весь индекс (который удовлетворяет условию) из старого JSON в новый JSON. Старый JSON = «output_log.json» Новый JSON = «cumulative_output.json»

Новый файл JSON будет представлять собой список индексов, например, что-то вроде этого:

 [{"name":".....", "commit":".....", "author":"...", "title":"...", "body":"..."},
{"name":".....", "commit":".....", "author":"...", "title":"...", "body":"..."},
.........
]
 
     with open("output_log.json", 'r') as f:
        json_ob = json.load(f)
      
        for index in range(len(json_ob)):
            if (bool(re.search(r"s", json_ob[index]['name']))) is True and ('444' in json_ob[index]['title']) and ('https://robotics.com/projects/' in json_ob[index]['body']):
                with open('cumulative_output.json', 'a') as f:
                    entry = {'name': json_ob[index]['name'], 'commit': json_ob[index]['commit'], 'author': json_ob[index]['author'], 'title': json_ob[index]['title'], 'body': json_ob[index]['body']}
                    f.write(entry)
                    f.write(",")
 

Комментарии:

1. Вам нужна одна строка JSON в выходном файле? Обработайте все в список, а затем json.дамп этого списка.

2. @tdelaney Я отредактировал вопрос, чтобы показать пример нового файла JSON. Я просто хочу добавлять по мере анализа данных, чтобы сэкономить время

Ответ №1:

Вы читаете и записываете один объект списка JSON, поэтому не так много возможностей выполнять итеративные действия. Ваш текущий код завершается с ошибкой, потому что вы не можете написать словарь python ( f.write(entry) ) без какой-либо сериализации. Прочитав список JSON, вы можете отфильтровать его и записать снова. Вам не нужны дополнительные сложности с индексацией списка, который вы читаете, просто повторите его. И поскольку вы хотите записать всю запись целиком, вам не нужно создавать новый словарь.

 with open("output_log.json") as f:
    json_ob = json.load(f)

entries = []
for entry in json_ob:
    if (re.search(r"s", entry["name"]) and ("444" in entry["title"])
            and (r"https://robotics.com/projects/" in entry["body"])):
        entries.append(entry)

with open("cumulative_output.json", "w") as f:
    json.dump(entries)