Konwerter JSON Schema na definicje Protobuf — Numio
Zamienia JSON Schema typu object na definicję komunikatu proto2. Pola są numerowane według kolejności właściwości: wymagane otrzymują "required", pozostałe "optional", a tablice "repeated". Zagnieżdżone obiekty stają się zagnieżdżonymi komunikatami z polem, które ich używa.
Masz schemat JSON dla zdarzenia i chcesz pierwszą wersję roboczą wiadomości .proto do edycji dla potoku gRPC lub Kafka.
Kiedy go używać
- Masz schemat JSON dla zdarzenia i chcesz pierwszą wersję roboczą wiadomości .proto do edycji dla potoku gRPC lub Kafka.
- Chcesz sprawdzić, jak pola skalarne istniejącego schematu będą mapowane na typy protobuf przed samodzielnym napisaniem wiadomości.
Jak używać
- Wklej JSON Schema z "type": "object" na najwyższym poziomie. Nazwa komunikatu pochodzi z "title" w PascalCase lub z klucza "name"; bez obu nazwą jest Root.
- Konwersja odbywa się w Twojej przeglądarce; nie ma żadnych ustawień.
- Skopiuj tekst proto2 z panelu Protobuf i przejrzyj typy przed użyciem go w pliku .proto.
Schemat JSON
{
"title": "Order",
"type": "object",
"properties": {
"id": { "type": "string" },
"quantity": { "type": "integer" },
"price": { "type": "number" },
"paid": { "type": "boolean" },
"tags": { "type": "array", "items": { "type": "string" } },
"shipping": { "type": "object", "properties": { "city": { "type": "string" } } }
},
"required": ["id", "quantity"]
}Bufory protokołu (proto2)
syntax = "proto2";
message Order {
message Shipping {
optional string city = 1;
}
required string id = 1;
required int32 quantity = 2;
optional double price = 3;
optional bool paid = 4;
repeated string tags = 5;
optional Shipping shipping = 6;
}Szczegóły i ograniczenia
Konwersja odbywa się w Twojej przeglądarce za pomocą konwertera dostępnego na stronie; schemat nie jest wysyłany na serwer.
integer jest mapowane na int32 (int64 dla formatu int64 lub granic poza zakresem 32-bitowym), number na double (float dla formatu float), a boolean na bool. Typy elementów tablic są mapowane w ten sam sposób.
Tekstowe wartości enum stają się zagnieżdżonym enum z prefiksami UPPER_SNAKE, schematy additionalProperties stają się map<string, T>, a lokalne $ref do definitions lub $defs wskazują komunikat najwyższego poziomu.
Tablice tablic, oneOf/anyOf z kilkoma gałęziami innymi niż null oraz właściwości bez typu otrzymują zastępczo typ string. $ref do innego pliku powoduje błąd.
FAQ
Czy generuje proto3?
Nie. Dane wyjściowe zawsze zaczynają się od składni = „proto2” i używają wymaganych/opcjonalnych etykiet.
W jaki sposób wybierana jest nazwa wiadomości?
Z głównego "title" przekształconego do PascalCase, np. "Example Schema" staje się ExampleSchema, lub z klucza "name". Jeśli nie ma żadnego z nich, komunikat nazywa się Root. Nazwy zagnieżdżonych komunikatów i enum pochodzą od właściwości.
W jaki sposób obsługiwane są pola dopuszczające wartość null, takie jak ["string", "null"]?
Część null jest usuwana, a pole używa pozostałego typu, np. optional double height dla ["number", "null"]. Pola opcjonalne proto2 mogą już być nieobecne.
Czy mój schemat został przesłany?
Nie. Ta strona konwertuje schemat w przeglądarce i nie wywołuje serwera API.