Naar de inhoud

JSON Schema naar Protobuf-definities — Numio

Verandert een JSON-schema van het objecttype in een proto2-berichtdefinitie. Velden zijn genummerd in volgorde van eigenschappen; vereiste eigenschappen worden "vereist", andere "optioneel", arrays "herhaald" en geneste objecten worden geneste berichten met een veld dat ze gebruikt.

U hebt een JSON-schema voor een gebeurtenis en wilt een eerste concept van een .proto-bericht om te bewerken voor een gRPC- of Kafka-pijplijn.

JSON Schema

Protobuf

Wanneer gebruik je dit?

  • U hebt een JSON-schema voor een gebeurtenis en wilt een eerste concept van een .proto-bericht om te bewerken voor een gRPC- of Kafka-pijplijn.
  • U wilt controleren hoe de scalaire velden van een bestaand schema zouden worden toegewezen aan protobuf-typen voordat u het bericht zelf schrijft.

Hoe werkt het

  1. Plak een JSON-schema met "type": "object" in de root. De berichtnaam komt van "titel" in PascalCase (of een "naam" -sleutel); zonder beide is het Root.
  2. De conversie wordt uitgevoerd in uw browser; er zijn geen instellingen.
  3. Kopieer de proto2-tekst uit het Protobuf-paneel en bekijk de typen voordat u deze in een .proto-bestand gebruikt.

JSON-schema

{
  "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"]
}

Protocolbuffers (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;
}

Details en beperkingen

De conversie wordt in uw browser uitgevoerd met de eigen converter van de site; het schema wordt niet naar een server verzonden.

geheel getal wordt toegewezen aan int32 (int64 met formaat int64 of grenzen buiten het 32-bits bereik), getal aan dubbel (zwevend met formaat float) en boolean aan bool. Array-itemtypen worden op dezelfde manier toegewezen.

Tekenreeksenums worden een geneste enum met vooraf ingestelde UPPER_SNAKE-waarden, additionalProperties-schema's worden map<string, T>, en lokaal $ref naar definities of $defs verwijst naar een bericht op het hoogste niveau.

Arrays van arrays, oneOf/anyOf met verschillende niet-null vertakkingen en niet-getypeerde eigenschappen vallen terug op string. Een $ref naar een ander bestand wordt als een fout gerapporteerd.

FAQ

Genereert het proto3?

Nee. De uitvoer begint altijd met syntax = "proto2" en gebruikt vereiste/optionele labels.

Hoe wordt de berichtnaam gekozen?

Van de root "titel" geconverteerd naar PascalCase, zodat "Voorbeeldschema" ExampleSchema wordt, of van een "naam" -sleutel. Zonder een van beide heet het bericht Root. Geneste berichten en opsommingen worden genoemd naar hun eigenschap.

Hoe worden null-velden zoals ["string", "null"] verwerkt?

Het nulgedeelte wordt verwijderd en het veld gebruikt het resterende type, bijvoorbeeld optionele dubbele hoogte voor ["getal", "null"]. proto2 optionele velden kunnen al ontbreken.

Is mijn schema geüpload?

Nee. Deze pagina converteert het schema in de browser en roept geen server API aan.

Specificaties en referenties