Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 12.12.2020
Сообщений: 23

Задача с json, "сервис подписки"

01.05.2023, 19:49. Показов 911. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Необъяснимая аномалия! На серверах Яндекс Маркета отказывает оборудование: ломаются жесткие диски, плавится оперативная память, выходит из строя система охлаждения. Системные администраторы локализовали проблему — причиной поломок оказалась используемая база данных. Руководители приняли решение срочно вывести из эксплуатации упомянутую базу данных и заменить ее самописной. Вам нужно как можно скорее предоставить MVP, который поддерживает:
частичное обновление товарных предложений в базе данных
уведомление сервисов-подписчиков при обновлении данных
Товарное предложение в базе описывается следующей JSON схемой:

{
"$id": "offer.schema.json",
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Offer identifier, only numerical symbols are allowed"
},
"price": {
"type": "integer",
"description": "Offer price, value in range from 0 to 10̂9"
},
"stock_count": {
"type": "integer",
"description": "Items left on stocks, value in range from 0 to 10̂9"
},
"partner_content": {
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Offer title filled in by the partner"
},
"description": {
"type": "string",
"description": "Offer description filled in by the partner"
}
}
}
},
"required": [
"id"
]
}
При межсервисном взаимодействии к товарному предложению добавляется контекст, который содержит идентификатор для сквозной трассировки, его схема:

{
"$id": "message.schema.json",
"type": "object",
"properties": {
"trace_id": {
"type": "string"
},
"offer": {
"$ref": "offer.schema.json"
}
},
"required": [
"trace_id",
"offer"
]
}
Сервис, который отправляет запрос на обновление товарного предложения, обязательно заполняет идентификатор оффера (поле
offer.id
) и идентификатор для трассировки (поле
trace_id). Все остальные поля в запросе опциональны. В таком случае при применении обновления будет происходить слияние полей. Например, в базе у оффера заполнены поля
price=9990, и приходит обновление stock_count=100
, тогда в базе будут сохранены оба поля price=9990; stock_count=100

. Гарантируется, что все входящие запросы валидны и соответствуют схеме. Так как это прототип, удаление товаров из базы и очищение полей было решено не поддерживать.
Помимо хранения товарных предложений в базе, в сервисе необходима функция доставки обновлений в сервисы-подписчиков. Одна подписка включает в себя два набора полей: trigger и shipment, не обязательно листовых. Когда изменяется любое trigger поле или поле, вложенное в trigger поле, подписчику отправляется сообщение. В сообщении находятся все shipment и trigger поля этого подписчика, а также идентификаторы оффера и трассировки из запроса, который привел к этому сообщению. Инициализация поля также считается за его изменении и создает сообщение об обновлении.

Формат ввода
Первая строка входных данных содержит два целых числа
n
и
m
(
1≤n≤50,1≤m≤10,000) — количество сервисов подписчиков и количество запросов на обновления.
Следующие
n
строк содержат описания сервисов подписчиков:
i
-я строка содержит описание
i
-го подписчика. В начале строки задается
ai
и
bi
— количество trigger и shipment полей соответственно. Далее
ai
trigger полей, и
bi
shipment полей.
Следующие
m
строк содержат запросы на обновление, каждая строка — это валидный json, удовлетворяющий схеме
message.schema.json

Формат вывода
На каждое событие обновления выведите kj
сообщений в формате
message.schema.json
, где
kj
— это количество сервисов-подписчиков, которым данное событие интересно. Сообщения должны идти в том же порядке, что и обновления, которые привели к ним. Сообщения в рамках одного обновления должны быть отсортированы по порядковому номеру подписчика.
Пример
Ввод Вывод
2 5
2 0 price stock_count
1 0 partner_content
{"trace_id": "1", "offer": {"id": "1", "price": 9990}}
{"trace_id": "2", "offer": {"id": "1", "stock_count": 100}}
{"trace_id": "3", "offer": {"id": "2", "partner_content": {"title": "Backpack"}}}
{"trace_id": "4", "offer": {"id": "1", "stock_count": 100}}
{"trace_id": "5", "offer": {"id": "2", "partner_content": {"description": "Best backpack ever"}}}
{"trace_id":"1","offer":{"id":"1","price ":9990}}
{"trace_id":"2","offer":{"id":"1","price ":9990,"stock_count":100}}
{"trace_id":"3","offer":{"id":"2","partn er_content":{"title":"Backpack"}}}
{"trace_id":"5","offer":{"id":"2","partn er_content":{"description":"Best backpack ever","title":"Backpack"}}}
Примечания
Для решений на языке Python доступны библиотеки json, requests и urllib.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.05.2023, 19:49
Ответы с готовыми решениями:

Сервис для разработчиков чтобы объединяться в общие подписки
Есть такая идея Платформа или площадка для разработчиков сервисов, приложений и игр. Чтобы разработчики и владельцы it-продуктов могли...

Вывести через web-сервис json c некоторыми данными БД
Добрый день всем! Подскажите, пожалуйста, как лучше выполнить задачу. Есть большая БД с тысячей таблиц. Нужно вывести через web-сервис...

Подписки MSDN -> подписки VS
Что-то не вижу в сети обсуждений политики MS по переводу подписок MSDN на подписки Visual Studio. :) Такое ощущение, что большинство нынче...

1
 Аватар для s_t_r_a_j
526 / 179 / 58
Регистрация: 12.02.2023
Сообщений: 641
01.05.2023, 22:12
Цитата Сообщение от student2025 Посмотреть сообщение
На серверах Яндекс Маркета отказывает оборудование
судя по объему вашей задачи реально все плохо ))))))
вы бы хоть спасибо говорили в виде кнопки спасибо иногда, а то прям реально иногда думаю, что решаешь задачи для реальных людей на должностях программеров в компаниях, и без спасибо
ну и еще интересно, я периодически интересуюсь, вы там в своих ВУЗах сами то что-нибудь решаете или все сюда скидываете для решения?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.05.2023, 22:12
Помогаю со студенческими работами здесь

Задача на Json
Напишите программу, которая распределит полученную информацию по двум категориям: то, что похоже на другие аналогичные планеты (same), и...

Java, JSON и JSON Simple. Непонятка с созданием объекта JSON на сервере для отправки на фронт
Здравствуйте. Разрабатываю интернет-магазин на Java. Мне нужно на фронте получить список товаров из базы данных для отображения на...

Ошибка при обработке Json - Cannot deserialize the current JSON array because the type requires a JSON object
Дополнительные сведения: Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.List`1'...

Ошибка при обработке Json - Cannot deserialize the current JSON array because the type requires a JSON object
Всем привет! Помогите, плиз, разобраться с ошибкой: An unhandled exception of type 'Newtonsoft.Json.JsonSerializationException'...

PHP и Json простенькая задача
Всем привет. Есть следующий код <?php $domain = "gruppatest99977"; $url =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru