Przejdź do treści

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.

JSON Schema

Protobuf

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ć

  1. 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.
  2. Konwersja odbywa się w Twojej przeglądarce; nie ma żadnych ustawień.
  3. 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.

Specyfikacje i referencje