JSON a estructuras de Rust
JSON to Rust Structs
Genera estructuras de Rust anotadas con serde a partir de un JSON de ejemplo, con Option para los campos nulos o ausentes y renombrado a snake_case.
Emite structs de Rust con derives de `serde` a partir de un documento JSON de ejemplo: `Serialize`, `Deserialize`, el `Option<…>` correcto en los campos que a veces faltaban, y un `#[serde(rename = "…")]` allí donde la clave JSON no es un nombre de campo snake_case legal.
JSON de ejemplo
Suelta un archivo .json
Se lee en esta pestaña. No se sube nada.
Dale todos los elementos que tengas. Cada registro de más estrecha la deducción: un campo que falte en uno de ellos es lo que lo vuelve opcional.
Rust
Cómo se usa
Pega todos los registros que tengas
Se lee y fusiona cada elemento de cada arreglo, no solo el primero. Tres registros dicen mucho más que uno, porque un campo ausente en uno de ellos es exactamente lo que hace que ese campo sea opcional.
Da nombre al tipo raíz
Los objetos anidados toman el nombre de la clave que los contiene, en singular para los arreglos, así que `users` produce un `User`. Solo la raíz necesita un nombre tuyo.
Lee los recuentos bajo la salida
Tipos, campos opcionales, uniones y cuántos registros se fusionaron. Un recuento de uniones mayor que cero significa que un campo tuvo dos clases de valor distintas en tu muestra, algo que conviene mirar antes de pegar el resultado en una base de código.
Pega los structs en tu crate
La línea `use serde::{Deserialize, Serialize};` se emite por ti; el crate en sí y su feature `derive` te toca añadirlos a Cargo.toml.
Preguntas frecuentes
¿Por qué un campo salió como `serde_json::Value`?
Porque contenía más de una clase de valor en la muestra: una cadena en un registro y un número en otro. Rust no tiene una unión sin etiquetar a la que recurrir aquí, y `Value` es el tipo honesto: deserializa sin mentir sobre lo que hay dentro.
¿Cuál es la diferencia entre `Option<T>` y `#[serde(default)]` aquí?
Un campo que era `null` en algunos registros se convierte en `Option<T>`; un campo que simplemente faltaba recibe además `#[serde(default)]`, para que deserializar un registro sin él tenga éxito en lugar de fallar. Ambos aparecen juntos cuando la muestra mostró ambas cosas.
¿Se generan enums para los campos de cadena?
No. Cada cadena es `String`. Inferir un enum a partir de un puñado de registros significa un error de deserialización la primera vez que producción envíe una variante que tu muestra no contenía, que es un fallo peor que un tipo laxo.
¿Puedo derivar otros traits?
Añádelos tú: la lista de derives emitida es deliberadamente solo `Serialize, Deserialize`. `Debug` y `Clone` casi siempre se quieren también, pero son una edición de una línea, y adivinar mal hace que la salida no compile para tipos que no pueden derivarlos.
Puede recibir de
JSON a estructuras de Go
JSON to Go Structs
Genera estructuras de Go con etiquetas json a partir de un JSON de ejemplo, incluidos los tipos anidados y repetidos.
Formateador y validador de JSON
JSON Formatter & Validator
Indenta, minifica y valida JSON, señalando la línea y la columna exactas del error de sintaxis.
Formateador y validador de YAML
YAML Formatter & Validator
Reindenta el YAML de forma uniforme, lo valida y señala los tabuladores y las anclas que rompen los analizadores.
Formateador y validador de TOML
TOML Formatter & Validator
Formatea y valida TOML, normalizando el orden de las tablas y el estilo de las tablas en línea.
Después
Estas aceptan lo que produce esta herramienta, así que el resultado puede pasar directamente.
Formateador y validador de JSON
JSON Formatter & Validator
Indenta, minifica y valida JSON, señalando la línea y la columna exactas del error de sintaxis.
JSON a estructuras de Go
JSON to Go Structs
Genera estructuras de Go con etiquetas json a partir de un JSON de ejemplo, incluidos los tipos anidados y repetidos.
JSON a tipos de TypeScript
JSON to TypeScript
Deduce interfaces o tipos de TypeScript a partir de un JSON de ejemplo, fusionando campos opcionales y uniones.
Codificador y decodificador Base64
Base64 Encoder & Decoder
Codifica y decodifica Base64 y Base64URL, para texto o archivos, tratando UTF-8 correctamente.
curl a código
curl to Code
Convierte un comando curl en fetch, axios, requests de Python, Go, PHP o PowerShell.
Hash de un texto
Text Hash
Calcula MD5, SHA-1, SHA-256, SHA-384, SHA-512 y CRC-32 de una cadena, con salida opcional en mayúsculas o en Base64.