Как добавить в уже существующий JSON файл аналогичные по структуре JSON данные?
Делаю запрос в ВК (реквест на 10-100 запросов постов), ответ приходит в формате JSON, записываю его в свой файл.
def write_file(data):
with open('posts98.json', 'a', encoding='utf-8') as file:
json.dump(data["response"]["items"], file, indent=2, ensure_ascii=False)
Мне нужно, чтобы при следующем запросе, если приходит другой data["response"]["items"], данные записались в уже существующий JSON.
- Если я делаю просто дозапись в этот же файл, то сам JSON ломается, так как его структура ломается
- Пытался сделать через добавление с лист / словарь, но не смог.
Реализация запроса:
def req():
search = '#поиск'
token = '*************'
r = requests.get('https://api.vk.com/method/newsfeed.search?user_id=7693331&v=5.126&'
'access_token=' + token,
params={'q': search,
'count': 1,
'extended': 1, # 1, если необходимо получить информацию о пользователе
# или сообществе, разместившем запись. По умолчанию: 0.
token: token,
'start_from': 0})
write_file(r.json())
Сам JSON такого формата:
{
"items": [
{
"id": 24660,
"date": 1608049868,
"owner_id": -83039408,
"from_id": -83039408,
"post_type": "post",
"text": "???%;№%;№",
"marked_as_ads": 0,
"attachments": [
{
"type": "photo",
"photo": {
"album_id": -7,
.....
Ответы (2 шт):
Структура вашего JSON файла не позволит дописывать данные в конец, т.к. список должен быть завершен (иметь ] в конце). Тоже самое относится к закрытию словаря }.
Соответственно с такой структурой JSON придется парсить весь JSON файл, добавлять данные в "items" и перезаписывать JSON.
Пример:
{
"items": [
{"id": 24660, "date": 1608049868},
{"id": 24661, "date": 1608049999},
]
}
если дописать в конец этого JSON файла еще одну запись - то JSON будет сломан:
{
"items": [
{"id": 24660, "date": 1608049868},
{"id": 24661, "date": 1608049999},
]
}
,{"id": 24662, "date": 1609056111}
Предложу, как вариант, создать файл-шаблон:
import json
data = {"items": []}
with open('data.txt', 'w') as f:
json.dump(data, f)
в цикле вычитывать из него данные
with open('data.txt') as f:
data = json.load(f)
полученный ответ дописывать (словари из 'items')
data = data['items'].append(r['items'])
и сохранять снова в файл...