Как сравнить два json файла?

Рейтинг: 0Ответов: 1Опубликовано: 01.05.2023

Есть два json файла, содержащие новости. В first.json новости парсятся раз в час, а в second.json новости парсятся каждые десять минут. Цель: сравнить эти файлы, чтобы вывести свежую новость. Как это лучше сделать? Мой код:

a = {
    "Автор": "Владимир Макаров",
    "Заголовок": "Игрок сообщил о баге, не позволяющем пройти Star Wars Jedi Survivor",
    "Описание": "Будьте осторожны на Кобо.",
    "Ссылка": "https://www.igromania.ru//news/125904/Igrok_soobschil_o_bage_ne_pozvolyayuschem_proyti_Star_Wars_Jedi_Survivor.html"
    },

b = {
    "Автор": "Валентин Сонин",
    "Заголовок": "DF о Jedi Survivor на PS5 — рейтрейсинг хорош, но мешает производительности",
    "Описание": "Более стабильно игра работает в режиме с 30 FPS.",
    "Ссылка": "https://www.igromania.ru//news/125910/DF_o_Jedi_Survivor_na_PS5-reytreysing_horosh_no_meshaet_proizvoditelnosti.html"
    },

with open('first.json') as file1:
    a = json.load(file1)

with open('second.json') as file2:
    b = json.load(file2)

if dumps(a) == dumps(b):
    print('Нет новых публикаций!')
else:
    print('Есть новые публикации!')
    

Тут выводим свежую публикацию. Не могу сообразить как это сделать.

Ответы

▲ 1

Для определения свежей новости можно сравнивать дату или время последней новости в каждом из файлов, и выводить ту, которая была опубликована более поздно. Можно использовать модуль datetime для преобразования дат и времени из строк в объекты datetime.datetime, и выполнения арифметических операций с ними. Для начала надо получить последние новости из каждого файла:

last_news_a = a[-1]  # Получаем последнюю новость из первого файла
last_news_b = b[-1]  # Получаем последнюю новость из второго файла

Далее преобразовать даты и время в объекты datetime.datetime:

time_a = datetime.datetime.strptime(last_news_a['time'], '%Y-%m-%d %H:%M:%S')
time_b = datetime.datetime.strptime(last_news_b['time'], '%Y-%m-%d %H:%M:%S')

Затем уже сравниваем две новости:

if time_a == time_b:
    print('Нет новых публикаций!')
elif time_a > time_b:
    print('Самая свежая новость:\n', last_news_a)
else:
    print('Самая свежая новость:\n', last_news_b)

На этом всё, полный код будет выглядеть вот так:

import datetime

with open('first.json') as file1:
    a = json.load(file1)

with open('second.json') as file2:
    b = json.load(file2)

last_news_a = a[-1]  # Получаем последнюю новость из первого файла
last_news_b = b[-1]  # Получаем последнюю новость из второго файла

# Преобразуем даты и времена в объекты datetime.datetime
time_a = datetime.datetime.strptime(last_news_a['time'], '%Y-%m-%d %H:%M:%S')
time_b = datetime.datetime.strptime(last_news_b['time'], '%Y-%m-%d %H:%M:%S')

if time_a == time_b:
    print('Нет новых публикаций!')
elif time_a > time_b:
    print('Самая свежая новость:\n', last_news_a)
else:
    print('Самая свежая новость:\n', last_news_b)