100 % local — seus dados nunca saem do seu navegador

JSON para GraphQL — SDL para o seu schema

Transforme uma amostra JSON em tipos SDL do GraphQL. Os objetos aninhados viram tipos próprios, prontos para colar no schema.graphql e já consultar.

Instantâneo Privado Zero cookies

Entrada JSON

Saída GraphQL

O que esta ferramenta faz

Uma amostra JSON vira tipos SDL do GraphQL, um 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 lê de fora para dentro: a lista nunca é nula, e nenhum elemento é. As duas metades vêm da amostra, que trazia uma lista e strings dentro.

Só tipos — isto ainda não é um esquema

Não há Query, nem Mutation, nem diretivas. Uma carga JSON diz como os dados são, não quais campos um servidor expõe nem como se chamam. Acrescente o ponto de entrada você mesmo:

type Query {
  root: Root!
}

Sem ele, o arquivo descreve tipos que não se podem pedir a ninguém.

O que o SDL não sabe dizer é nomeado, não fingido

  • null e os valores desconhecidos viram um escalar JSON próprio, declarado no topo e deixado à sua implementação. O SDL não tem um tipo «qualquer coisa».
  • Um array heterogêneo vira [JSON]! pela mesma razão: uma lista de formas misturadas não é um tipo lista do GraphQL.
  • Um inteiro fora de 32 bits vira BigInt, outro escalar próprio. O Int do GraphQL é de 32 bits com sinal: um identificador de onze dígitos não é representável, e um servidor que o devolva lança na serialização. Ele saía Int! mesmo assim; era um defeito real, encontrado ao escrever esta página e corrigido.
  • Um objeto vazio é recusado. type A {} não é SDL válido — um tipo precisa definir pelo menos um campo — então a conversão para e nomeia o tipo em vez de lhe entregar um esquema que servidor nenhum vai analisar. Também foi encontrado e corrigido aqui.

Os nomes são consertados, as colisões separadas

Um nome do GraphQL admite só letras, dígitos e _, e não começa por dígito. content-type vira content_type, 2fa vira _2fa. Quando dois nomes consertados se encontram dentro de um tipo, o segundo leva sufixo: nada é fundido em silêncio.

Um escalar na raiz — 42, "texto" — é recusado: o SDL descreve tipos objeto, e ali não há nada a descrever.

Privado por padrão

Tudo é executado localmente no seu navegador com JavaScript. Os seus dados nunca são enviados para um servidor, o que torna a ferramenta segura para conteúdo sensível e funciona offline.

Perguntas frequentes

Por que não há tipo `Query`?
Porque uma amostra descreve dados, não um ponto de entrada. A saída é a parte de tipos de um esquema; um servidor precisa também de um `Query` (muitas vezes de um `Mutation`) nomeando os campos que expõe. Acrescente `type Query { root: Root! }` e o esquema pode ser servido — o que vai ali é decisão de API, não fato da carga.
Meu identificador de onze dígitos saiu como `BigInt` e não `Int`. Por quê?
Porque o `Int` do GraphQL é um inteiro com sinal de 32 bits e o seu valor não cabe. Antes saía `Int!` assim mesmo, o que tornava o esquema falso para a própria amostra de onde veio — o graphql-js lança na serialização. Fora da faixa de 32 bits o campo passa por um escalar `BigInt`, declarado no topo e implementado por você.
Por que tudo leva `!` atrás?
Porque a amostra tinha valor para todos os campos, e `!` é como o SDL escreve «aqui há um valor». É a afirmação que o documento sustenta. Se um campo pode ser nulo em geral é decisão de API: tire o `!` onde for o caso.

Conversores relacionados