Набор JSON ↔ Protobuf
Выводите схемы .proto из JSON или кодируйте и декодируйте Protobuf по своей схеме
Вставьте пример JSON или загрузите пример, затем выберите «Создать .proto».
Три преобразования по отдельности
JSON → .proto выводит схему proto3 из примера JSON. JSON → Protobuf кодирует сообщение JSON в двоичный вид по вашей схеме .proto и типу сообщения, а Protobuf → JSON декодирует hex, base64 или двоичный файл обратно в JSON. Вывод схемы и настоящее кодирование — разные задачи, поэтому у каждой свой режим.
Как выводится схема
По умолчанию строки становятся string, логические значения — bool, дробные числа — double, а целые — int64, потому что значение, которое сегодня помещается в int32, завтра может не поместиться. Объекты становятся сообщениями с именами в PascalCase по ключам, массивы одного типа — полями repeated, а все объекты массива объединяются, чтобы не потерять необязательные ключи. Значения, где встречается только null, пустые или смешанные, используют google.protobuf.Value и попадают в заметки. Номера полей назначаются в порядке ключей; после развёртывания схемы они входят в двоичный формат и не должны меняться.
Кодирование и декодирование
JSON использует сопоставление ProtoJSON: имена полей в lowerCamelCase, 64-битные целые как строки, bytes в base64, перечисления по именам и особые формы известных типов, таких как Timestamp, Duration, Struct и обёртки. Дополнительные параметры позволяют выводить значения по умолчанию, сохранять имена полей proto, записывать перечисления числами или игнорировать неизвестные поля JSON. При декодировании показываются номера полей, которых нет в выбранном сообщении, — частый признак того, что выбран не тот тип сообщения.
Ограничения и конфиденциальность
Схемы должны быть самодостаточными: известные типы Google (Timestamp, Duration, Struct, Any, Empty, FieldMask и обёртки) встроены, а другие импорты никогда не загружаются из сети. По одному примеру нельзя понять перечисления, словари, признак наличия и планы развития, поэтому проверяйте каждую выведенную схему. Всё работает в вашем браузере; сообщения и схемы не отправляются на сервер.
