Convertir JSON Schema a Protobuf — Numio
Convierte un JSON Schema de tipo object en una definición de mensaje proto2. Los campos se numeran en el orden de las propiedades; las propiedades requeridas pasan a "required", las demás a "optional", los arrays a "repeated", y los objetos anidados pasan a mensajes anidados con un campo que los usa.
Tienes un JSON Schema de un evento y quieres un primer borrador de mensaje .proto para editarlo en un pipeline de gRPC o Kafka.
Cuándo usarla
- Tienes un JSON Schema de un evento y quieres un primer borrador de mensaje .proto para editarlo en un pipeline de gRPC o Kafka.
- Quieres ver cómo se asignarían los campos escalares de un esquema existente a tipos de protobuf antes de escribir el mensaje tú mismo.
Cómo usarla
- Pega un JSON Schema con "type": "object" en la raíz. El nombre del mensaje sale de "title" en PascalCase (o de una clave "name"); sin ninguno de los dos es Root.
- La conversión se ejecuta en tu navegador; no hay opciones de configuración.
- Copia el texto proto2 del panel Protobuf y revisa los tipos antes de usarlo en un archivo .proto.
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"]
}Protocol Buffers (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;
}Detalles y limitaciones
La conversión se ejecuta en tu navegador con el conversor propio del sitio; el esquema no se envía a ningún servidor.
integer se asigna a int32 (int64 con format int64 o con límites fuera del rango de 32 bits), number a double (float con format float) y boolean a bool. Los tipos de los elementos de un array se asignan igual.
Los enums de strings pasan a un enum anidado con valores UPPER_SNAKE con prefijo, los esquemas de additionalProperties pasan a map<string, T>, y un $ref local a definitions o $defs apunta a un mensaje de nivel superior.
Los arrays de arrays, oneOf/anyOf con varias ramas no nulas y las propiedades sin tipo recurren a string. Un $ref a otro archivo se notifica como error.
FAQ
¿Genera proto3?
No. La salida siempre empieza por syntax = "proto2" y usa las etiquetas required/optional.
¿Cómo se elige el nombre del mensaje?
A partir del "title" de la raíz convertido a PascalCase, de modo que "Example Schema" pasa a ExampleSchema, o de una clave "name". Sin ninguno de los dos, el mensaje se llama Root. Los mensajes y enums anidados toman el nombre de su propiedad.
¿Cómo se tratan los campos anulables como ["string", "null"]?
Se descarta la parte null y el campo usa el tipo restante, por ejemplo optional double height para ["number", "null"]. Los campos optional de proto2 ya pueden estar ausentes.
¿Se sube mi esquema?
No. Esta página convierte el esquema en el navegador y no llama a ninguna API del servidor.