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.
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
- 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.
- De conversie wordt uitgevoerd in uw browser; er zijn geen instellingen.
- 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.