100 % local: tus datos nunca salen de tu navegador

JSON a GraphQL — SDL para tu archivo de esquema

Convierte una muestra JSON en tipos SDL de GraphQL. Los objetos anidados pasan a ser tipos propios, listos para pegar en schema.graphql y consultar.

Instantáneo Privado Cero cookies

Entrada JSON

Salida GraphQL

Qué hace esta herramienta

Una muestra JSON pasa a ser tipos SDL de GraphQL, uno por objeto.

{ "id": 1, "name": "Ada", "tags": ["admin"], "address": { "city": "Paris" } }
type Root {
  id: Int!
  name: String!
  tags: [String!]!
  address: Address!
}

type Address {
  city: String!
}

[String!]! se lee de fuera adentro: la lista nunca es nula, y ningún elemento lo es tampoco. Las dos mitades vienen de la muestra, que traía una lista y cadenas dentro.

Solo tipos: esto todavía no es un esquema

No hay Query, ni Mutation, ni directivas. Una carga JSON dice cómo son los datos, no qué campos expone un servidor ni cómo se llaman. Añade el punto de entrada tú:

type Query {
  root: Root!
}

Sin él, el archivo describe tipos que no se le pueden pedir a nadie.

Lo que el SDL no sabe decir se nombra, no se finge

  • null y los valores desconocidos pasan a un escalar JSON propio, declarado arriba y dejado a tu implementación. El SDL no tiene un tipo «cualquier cosa».
  • Un array heterogéneo pasa a [JSON]! por la misma razón: una lista de formas mezcladas no es un tipo lista de GraphQL.
  • Un entero fuera de 32 bits pasa a BigInt, otro escalar propio. El Int de GraphQL es de 32 bits con signo: un identificador de once cifras no es representable, y un servidor que lo devuelva lanza al serializar. Salía Int! de todos modos; era un defecto real, encontrado al escribir esta página y corregido.
  • Un objeto vacío se rechaza. type A {} no es SDL válido —un tipo debe definir al menos un campo—, así que la conversión se detiene y nombra el tipo en vez de entregarte un esquema que ningún servidor analizará. También se encontró y corrigió aquí.

Los nombres se reparan, las colisiones se separan

Un nombre de GraphQL admite solo letras, dígitos y _, y no empieza por dígito. content-type pasa a content_type, 2fa pasa a _2fa. Cuando dos nombres reparados chocan dentro de un tipo, el segundo lleva sufijo: nada se funde en silencio.

Un escalar en la raíz —42, "texto"— se rechaza: el SDL describe tipos objeto, y ahí no hay nada que describir.

Privado por diseño

Todo se ejecuta localmente en tu navegador con JavaScript. Tus datos nunca se suben a un servidor, lo que hace que la herramienta sea segura para contenido sensible y funcione sin conexión.

Preguntas frecuentes

¿Por qué no hay tipo `Query`?
Porque una muestra describe datos, no un punto de entrada. La salida es la parte de tipos de un esquema; un servidor necesita además un `Query` (y a menudo un `Mutation`) que nombre los campos que expone. Añade `type Query { root: Root! }` y el esquema se puede servir: lo que va ahí es una decisión de API, no un hecho de la carga.
Mi identificador de once cifras salió como `BigInt` y no `Int`. ¿Por qué?
Porque el `Int` de GraphQL es un entero con signo de 32 bits y tu valor no cabe. Antes salía `Int!` igualmente, lo que hacía falso el esquema para la muestra de la que venía: graphql-js lanza al serializar. Fuera del rango de 32 bits el campo pasa por un escalar `BigInt`, declarado arriba y que implementas tú.
¿Por qué todo lleva `!` detrás?
Porque la muestra tenía un valor para cada campo, y `!` es como se escribe en SDL «aquí hay un valor». Es la afirmación que el documento sostiene. Si un campo puede ser nulo en general es una decisión de API: quita el `!` donde corresponda.

Convertidores relacionados