Go encoding/json: фильтрация потока JSON по полю alert
Журнал тревог умного дома
Система умного дома непрерывно собирает показания датчиков: температуры, влажности, движения, концентрации газа — из каждой комнаты квартиры или офиса. Датчики работают в фоне и молча передают поток событий, подавляющее большинство которых просто фиксирует нормальную обстановку. Именно поэтому среди сотен записей за день по-настоящему важны лишь те, что помечены флагом тревоги: слишком высокая температура, посторонний запах или несанкционированное движение в ночные часы.
Инженер, настраивающий такую систему, хочет получить отдельный журнал: компактный список только тревожных событий, пригодный для дальнейшей обработки или отображения на панели диспетчера. Входной поток устроен просто — каждая строка представляет собой самостоятельное JSON-описание одного события с указанием комнаты, типа датчика, измеренного значения и признака тревоги. Нулевые показания значения в выходном журнале не занимают места.
Что нужно сделать
Допишите writeAlerts. Вход содержит самостоятельные JSON-объекты, записанные подряд по одному на строку. Читайте их до конца потока и выводите в том же порядке только события с alert=true. Нулевое value не должно попадать в выходной JSON. Ошибку чтения или записи верните вызывающему коду.
Формат ввода
Ноль или больше JSON-объектов Event, по одному на строку.
Формат вывода
Тревожные события в формате newline-delimited JSON.
Пример
Ввод:
{"room":"kitchen","sensor_type":"smoke","value":8,"alert":false}
{"room":"garage","sensor_type":"smoke","value":42,"alert":true}
Вывод:
{"room":"garage","sensor_type":"smoke","value":42,"alert":true}
Пример
- Ввод
{"room":"kitchen","sensor_type":"smoke","value":8,"alert":false} {"room":"garage","sensor_type":"smoke","value":42,"alert":true}- Вывод
{"room":"garage","sensor_type":"smoke","value":42,"alert":true}
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- Go fmt.Sprintf: форматирование строки и числа с двумя знаками
- Go strings.Split и strconv.ParseFloat: сумма чисел в строке
- Go []rune: разворот строки UTF-8 без порчи кириллицы
- Go strings: проверка имени файла и расширения перед загрузкой
- Go if и switch: несколько значений в одной ветке
- Go pointer receiver и встраивание struct: изменяемый счётчик
