Большие целые в JSON: проверить точность идентификаторов
Полевой шлюз передаёт длинный номер события, но после обработки два соседних номера становятся одинаковыми. Причина может находиться в числовом типе одного из промежуточных компонентов. Для идентификатора такое округление разрушает связь записей, даже если измеряемая величина и сетевой обмен остаются исправными.
Отличить синтаксис от возможностей реализации
RFC8259 рассматривает совместимость представления чисел между реализациями JSON. (IETF — RFC8259 JSON) Сам формат не следует описывать как безусловный запрет больших целых. Проблема определяется тем, какие числовые типы реально используют парсер, язык, база, сериализатор и пользовательский интерфейс на всём пути.
Составьте таблицу типов для исходного номера. Укажите максимальный предусмотренный диапазон и необходимость точного равенства. Идентификатор обычно не требует арифметики физической величины, поэтому удобство отображения числа не должно определять его сохранность или возможность сравнения.
Подготовить точный контрольный набор
Создайте собственные соседние большие целые в пределах и за пределами точно поддерживаемого диапазона выбранной реализации. Исходный эталон храните способом, который сам не округляет данные. Не создавайте тестовые значения уже через тот же ограниченный числовой тип, который собираетесь проверять.
Передайте набор через все рабочие компоненты, включая экспорт и повторный импорт. Сравните точное представление и различимость соседних идентификаторов. Успешное чтение JSON без исключения не подтверждает, что значение сохранилось без изменения младших разрядов.
Увеличить схему
Выбрать явный контракт
Если идентификатор передаётся строкой, закрепите это в схеме и проверьте потребителей. Не преобразуйте его обратно в обычное число ради сортировки или построения адреса. Правило ведущих нулей и допустимого текстового формата также должно быть определено, если они существенны для источника.
Для настоящего числового счётчика может потребоваться поддерживаемый точный целочисленный тип либо иной согласованный способ кодирования. Выбор проверяют по всему маршруту. Самостоятельное изменение типа только на шлюзе способно нарушить совместимость старого приёмника и не решает задачу автоматически.
Проверить историю и интерфейс
Сопоставьте уже сохранённые тестовые записи и способ формирования ссылок, ключей и поиска. Экран может показывать сокращённую запись для удобства, но должен сохранять точную идентичность в операциях. Нельзя использовать округлённое отображение как первичный ключ архива.
Приёмка включает точный проход туда и обратно, соседние значения и проверку ключей хранения. После смены языка обработки или драйвера базы повторите набор. Для хозяйства результатом становится устойчивое различение событий без скрытого объединения записей, которое трудно обнаружить по обычным графикам измеряемых величин.