Перейти до вмісту

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 ніколи не залишає ваш пристрій.