Zum Hauptinhalt springen
Lektion 7 von 12 · Strukturierte JSON-Ausgaben

Zod mit JavaScript

Lektion 7 von 12 Aktualisiert am 30. Juli 2026 Entwickler
Auf dieser Seite
  1. Strukturierte Ausgaben in JavaScript
  2. Installation
  3. Client-Konfiguration
  4. Schema-Definition mit Zod
  5. Typabbildung
  6. Vollständiges Beispiel
  7. Verschachtelte Schemata
  8. Optionale Felder mit nullable
  9. Clientseitige Validierung
  10. Kernaussagen

Strukturierte Ausgaben in JavaScript

Wenn Sie in JavaScript oder TypeScript entwickeln, ist Zod das Äquivalent zu Pydantic. Diese Schema-Validierungsbibliothek integriert sich nahtlos mit der Grok-API, um typisierte strukturierte Ausgaben zu erzeugen.

Installation

npm install zod openai

Das OpenAI-SDK für JavaScript funktioniert direkt mit der Grok-API; Sie müssen lediglich auf den korrekten Endpunkt verweisen.

Client-Konfiguration

import OpenAI from "openai";

const client = new OpenAI({
  apiKey: "your-xai-key",
  baseURL: "https://api.x.ai/v1"
});

Schema-Definition mit Zod

Zod verwendet eine flüssige API zur Definition von Schemata. Jede Methode entspricht einem JSON-Typ:

import { z } from "zod";

const MovieReview = z.object({
  title: z.string(),
  rating: z.number(),
  summary: z.string(),
  recommend: z.boolean()
});

Typabbildung

ZodJSON SchemaPydantic (Python)
z.string()"type": "string"str
z.number()"type": "number"float
z.boolean()"type": "boolean"bool
z.array(z.string())array von Stringslist[str]
z.object({...})"type": "object"BaseModel
z.enum([...])enumLiteral[...]
z.union([...])anyOfUnion-Typen
z.nullable()anyOf mit nullstr | None

Vollständiges Beispiel

import OpenAI from "openai";
import { z } from "zod";

const client = new OpenAI({
  apiKey: "your-xai-key",
  baseURL: "https://api.x.ai/v1"
});

const Analyse = z.object({
  titre: z.string(),
  resume: z.string(),
  sentiment: z.enum(["positif", "negatif", "neutre"]),
  score: z.number(),
  mots_cles: z.array(z.string()),
  recommandation: z.boolean()
});

const response = await client.chat.completions.create({
  model: "grok-4.20-0309-reasoning",
  messages: [{
    role: "user",
    content: "Analysieren Sie den folgenden Text: Der Umsatz stieg dieses Quartal um 25%."
  }],
  response_format: {
    type: "json_schema",
    json_schema: {
      name: "analyse",
      schema: Analyse
    }
  }
});

const data = JSON.parse(response.choices[0].message.content);
console.log(data.sentiment);  // "positif"
console.log(data.score);      // 0.92

Verschachtelte Schemata

Wie Pydantic verarbeitet Zod Verschachtelungen natürlich:

const Adresse = z.object({
  rue: z.string(),
  ville: z.string(),
  code_postal: z.string(),
  pays: z.string()
});

const Contact = z.object({
  nom: z.string(),
  email: z.string(),
  telephone: z.string().nullable(),
  adresse: Adresse,
  tags: z.array(z.string())
});

Optionale Felder mit nullable

Um ein Feld optional zu machen (d. h. null zulassen), verwenden Sie .nullable():

const Produit = z.object({
  nom: z.string(),
  prix: z.number(),
  description: z.string().nullable(),
  promotion: z.number().nullable()
});

Clientseitige Validierung

Ein Vorteil von Zod besteht darin, dass Sie Daten clientseitig mit demselben Schema validieren können:

const rawData = JSON.parse(response.choices[0].message.content);

// Validierung mit Zod
const result = Analyse.safeParse(rawData);

if (result.success) {
  console.log(result.data.titre);
} else {
  console.error("Validierungsfehler:", result.error);
}

In der Praxis wird die Validierung immer erfolgreich sein, da die API die Schema-Konformität garantiert. Diese zusätzliche Ebene ist jedoch für die Robustheit in der Produktion nützlich.

Kernaussagen

  • Zod ist das JavaScript/TypeScript-Äquivalent zu Pydantic.
  • Die Syntax ist flüssig: z.string(), z.number(), z.object({...}).
  • .nullable() macht ein Feld optional (kann null sein).
  • Geben Sie Zod-Schemata in response_format.json_schema.schema an.
  • safeParse() ermöglicht eine defensive clientseitige Validierung.
  • Das OpenAI-SDK für JavaScript funktioniert direkt mit der Grok-API.