Перейти к содержанию

JSON в схему Protobuf

Преобразуйте образец JSON в определение сообщения Protocol Buffers .proto.

Входные данные
Выходные данные

JSON в схему Protobuf

Вставьте образец JSON, и этот инструмент определит форму ваших данных и выведет её как определение сообщения Protocol Buffers, готовое к добавлению в файл .proto. Он создан для повседневного случая преобразования ответа API, объекта конфигурации или записи журнала в стартовую схему вместо ручного ввода номеров и типов полей.

Выберите синтаксис proto3 или proto2, назовите корневое сообщение и добавьте объявление пакета, если ваш проект его использует. Номера полей начинаются с 1 по умолчанию и увеличиваются на 1 для каждого поля, оба значения настраиваются для заранее зарезервированной схемы нумерации. Массивы становятся повторяющимися полями, а объект со всеми значениями одного типа — поиск по идентификатору или коду языка — становится map<string, T> вместо фиксированного сообщения, поэтому поле словаря не превращается в десятки именованных полей. Включите ключевое слово optional, чтобы отметить поля, отсутствующие или равные null в части вашего образца, и переключайте вложенные сообщения, чтобы сохранить дочерние типы внутри их родителя, а не как плоские одноуровневые соседи. Строки дат в формате ISO 8601 преобразуются в google.protobuf.Timestamp, и каждое поле может содержать комментарий с его исходным ключом JSON.

Глубоко вложенные объекты, массивы объектов, массивы массивов и поля смешанного типа — всё обрабатывается: истинно смешанное значение отступает к google.protobuf.Value с соответствующим импортом, добавленным автоматически. Некорректный JSON сообщается с указанием строки и столбца, где произошел сбой при анализе, а не с общей ошибкой.

Всё работает локально в вашем браузере — ваш JSON никогда не загружается никуда. Скопируйте сгенерированную схему, загрузите её как файл .txt для переименования в .proto или отправьте результат другому инструменту, чтобы продолжить работу.

FAQ

Производит ли она реальный, компилируемый синтаксис .proto?
Да — выходные данные представляют собой простой синтаксис сообщений protobuf (proto2 или proto3), который вы можете вставить непосредственно в файл .proto. Долгосрочное обслуживание, например, сохранение стабильности номеров полей при изменении схемы, остаётся вашей ответственностью.
Как она решает между map и message для объектного поля?
Когда каждое значение внутри объекта имеет один и тот же скалярный тип, оно отображается как map<string, T> — форма, которую имеет реальный словарь. Как только объект смешивает типы значений во всех своих ключах, он становится именованным полем сообщения поле за полем вместо этого.
Что происходит с полем, которое имеет разные типы в образце?
Оно переходит к google.protobuf.Value с соответствующим импортом, добавленным в начало схемы. Уточните тип поля вручную после того, как решите, какой тип является авторитетным.
Могу ли я нумеровать поля, начиная с другого числа, чем 1?
Да — установите начальное число и шаг в параметрах. Нумерация перезапускается в выбранном вами начальном значении внутри каждого вложенного сообщения, что соответствует тому, как protobuf охватывает номера полей.
Загружается ли мой JSON куда-нибудь?
Нет. Генерация схемы выполняется полностью в вашем браузере — ваш JSON никогда не покидает ваше устройство.