100 % lokal — Ihre Daten verlassen nie Ihren Browser

JSON in GraphQL — SDL für Ihre Schema-Datei

Ein JSON-Beispiel in GraphQL-SDL-Typen verwandeln. Verschachtelte Objekte werden eigene Typen — fertig zum Einfügen in schema.graphql und zum Abfragen.

Sofort Privat Null Cookies

JSON-Eingabe

GraphQL-Ausgabe

Was dieses Werkzeug tut

Aus einer JSON-Probe werden GraphQL-SDL-Typen, einer je Objekt.

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

type Address {
  city: String!
}

[String!]! liest man von außen nach innen: die Liste ist nie null, und kein Element ist es. Beide Hälften stammen aus der Probe, die eine Liste hatte und Zeichenketten darin.

Nur Typen — noch kein Schema

Kein Query, kein Mutation, keine Direktiven. Eine JSON-Nutzlast sagt, wie die Daten aussehen, nicht welche Felder ein Server anbietet oder wie sie heißen. Ergänzen Sie den Einstiegspunkt selbst:

type Query {
  root: Root!
}

Ohne ihn beschreibt die Datei Typen, nach denen niemand fragen kann.

Was SDL nicht ausdrücken kann, wird benannt, nicht vorgetäuscht

  • null und unbekannte Werte werden zu einem eigenen JSON-Skalar, oben deklariert und Ihrer Umsetzung überlassen. SDL kennt keinen „irgendetwas“-Typ.
  • Ein gemischtes Array wird [JSON]!, aus demselben Grund: eine Liste gemischter Formen ist kein GraphQL-Listentyp.
  • Eine Ganzzahl außerhalb von 32 Bit wird BigInt, ein weiterer eigener Skalar. GraphQLs Int ist 32-Bit-vorzeichenbehaftet: eine elfstellige Kennung ist darin nicht darstellbar, und ein Server, der sie liefert, wirft beim Serialisieren. Sie wurde trotzdem Int! getypt; ein echter Fehler, beim Schreiben dieser Seite gefunden und behoben.
  • Ein leeres Objekt wird abgelehnt. type A {} ist kein gültiges SDL — ein Typ muss mindestens ein Feld definieren — also hält die Umwandlung an und nennt den Typ, statt Ihnen ein Schema zu geben, das kein Server parst. Auch das wurde hier gefunden und behoben.

Namen werden repariert, Kollisionen getrennt gehalten

Ein GraphQL-Name erlaubt nur Buchstaben, Ziffern und _ und beginnt nie mit einer Ziffer. content-type wird content_type, 2fa wird _2fa. Treffen zwei reparierte Namen in einem Typ aufeinander, bekommt der zweite ein Suffix: nichts wird stillschweigend verschmolzen.

Ein Skalar an der Wurzel — 42, "Text" — wird abgelehnt: SDL beschreibt Objekttypen, und da gibt es nichts zu beschreiben.

Datenschutz ab Werk

Alles läuft lokal in deinem Browser mit JavaScript. Deine Daten werden nie hochgeladen, wodurch das Tool auch für sensible Inhalte sicher ist und offline funktioniert.

Häufige Fragen

Warum gibt es keinen `Query`-Typ?
Weil eine Probe Daten beschreibt, keinen Einstiegspunkt. Die Ausgabe ist der Typteil eines Schemas; ein Server braucht zusätzlich ein `Query` (oft ein `Mutation`), das die angebotenen Felder benennt. Ergänzen Sie `type Query { root: Root! }`, und das Schema lässt sich ausliefern — was hineingehört, ist eine API-Entscheidung, keine Aussage der Nutzlast.
Meine elfstellige Kennung kam als `BigInt` statt `Int`. Warum?
Weil GraphQLs `Int` eine vorzeichenbehaftete 32-Bit-Ganzzahl ist und Ihr Wert nicht hineinpasst. Zuvor wurde sie trotzdem `Int!` getypt, womit das Schema für genau die Probe falsch war, aus der es stammte — graphql-js wirft beim Serialisieren. Außerhalb des 32-Bit-Bereichs nutzt das Feld nun einen `BigInt`-Skalar, oben deklariert und von Ihnen umgesetzt.
Warum folgt überall ein `!`?
Weil die Probe für jedes Feld einen Wert hatte, und `!` ist, wie SDL „hier steht ein Wert“ schreibt. Das ist die Aussage, die das Dokument trägt. Ob ein Feld allgemein null sein darf, ist eine API-Entscheidung: streichen Sie das `!`, wo es zutrifft.

Ähnliche Konverter