{}const=>[]async()letfn</>var
Entwicklung

JSON: Datenaustauschformat in der modernen Webentwicklung

Der Artikel enthält eine detaillierte Anleitung zur Arbeit mit JSON für Entwickler: Syntax, JSON.stringify() und JSON.parse() Methoden, praktische Anwendungsmuster, Leistungsoptimierung, Sicherheit und Lösung häufiger Fehler bei der Arbeit mit dem Datenaustauschformat.

К

Kodik

Autor

6 Min. Lesezeit

JSON (JavaScript Object Notation) ist ein leichtgewichtiges Textformat für den Datenaustausch, das zum De-facto-Standard in der modernen Webentwicklung geworden ist. Trotz des Namens, der das Wort "JavaScript" enthält, ist JSON ein sprachunabhängiges Format und wird von fast allen modernen Programmiersprachen unterstützt.

Geschichte

JSON wurde Anfang der 2000er Jahre von Douglas Crockford als Alternative zu XML für die Datenübertragung zwischen Browser und Server entwickelt. Ursprünglich wurde das Format in State Software-Projekten verwendet, bei denen Crocford als Berater tätig war. Die offizielle JSON-Spezifikation wurde 2006 als RFC 4627 veröffentlicht und dann 2013 (RFC 7159) und 2017 (RFC 8259) aktualisiert.

Die Einfachheit und Lesbarkeit von JSON machte es schnell zu einer beliebten Wahl für Web-APIs. Heute wird JSON nicht nur in der Webentwicklung verwendet, sondern auch in Konfigurationsdateien, NoSQL-Datenbanken, beim Datenaustausch zwischen Microservices und in vielen anderen Bereichen.

🔥 100.000+ Schüler sind bereits bei uns

Genug Theorie gelesen?
Zeit zu coden!

Kodik — eine App, in der du durch Praxis programmieren lernst. KI-Mentor, interaktive Lektionen, echte Projekte.

🤖 KI 24/7
🎓 Zertifikate
💰 Kostenlos
🚀 Jetzt starten
Heute beigetreten

Grundlagen der Syntax

JSON basiert auf zwei universellen Datenstrukturen: Objekten (Sammlungen von Schlüssel-Wert-Paaren) und Arrays (geordnete Wertelisten).

Datentypen

JSON unterstützt die folgenden Datentypen:

Zeilen - Sequenzen von Unicode-Zeichen in Anführungszeichen. Sonderzeichen werden mit einem umgekehrten Schrägstrich maskiert.

Zahlen - ganze oder gebrochene Zahlen im Dezimalsystem. JSON unterscheidet nicht zwischen Ganzzahlen und Gleitkommazahlen auf Syntaxebene.

Boolesche Wertetrue oder false.

Null — ein spezieller Wert, der das Fehlen von Daten anzeigt.

Objekte — ungeordnete Sammlungen von Schlüssel-Wert-Paaren, wobei die Schlüssel immer Zeichenfolgen sind.

Arrays — geordnete Listen von Werten beliebiger Art.

Beispiel für eine Struktur

{
  "user": {
    "id": 12345,
    "username": "developer",
    "email": "dev@example.com",
    "isActive": true,
    "roles": ["admin", "editor"],
    "profile": {
      "firstName": "Ivan",
      "lastName": "Petrov",
      "age": 28
    },
    "lastLogin": null
  }
}

Arbeiten mit JSON in JavaScript

JavaScript bietet ein eingebautes Objekt JSON mit zwei Hauptmethoden für die Arbeit mit diesem Format.

Serialisierung: JSON.stringify()

Die Methode JSON.stringify() wandelt ein JavaScript-Objekt in eine JSON-Zeile um:

const user = {
  name: "Alexey",
  age: 30,
  skills: ["JavaScript", "Vue.js", "Node.js"]
};

const jsonString = JSON.stringify(user);
// '{"name":"Alexey","age":30,"skills":["JavaScript","Vue.js","Node.js"]}'

Die Methode unterstützt zusätzliche Parameter zur Steuerung der Formatierung:

// Schöne Formatierung mit Einrückungen
const formatted = JSON.stringify(user, null, 2);

// Selektive Serialisierung von Feldern
const filtered = JSON.stringify(user, ['name', 'age']);

// Verwenden der Ersatzfunktion
const custom = JSON.stringify(user, (key, value) => {
  if (typeof value === 'string') {
    return value.toUpperCase();
  }
  return value;
});

Deserialisierung: JSON.parse()

Die Methode JSON.parse() wandelt eine JSON-Zeile wieder in ein JavaScript-Objekt um:

const jsonString = '{"name":"Alexey","age":30}'
const user = JSON.parse(jsonString);

console.log(user.name); // "Alexey"

Sie können die Rewriter-Funktion verwenden, um Werte beim Parsen zu transformieren:

const jsonWithDate = '{"created":"2024-01-15T10:30:00.000Z"}';

const data = JSON.parse(jsonWithDate, (key, value) => {
  if (key === 'created') {
    return new Date(value);
  }
  return value;
});

console.log(data.created instanceof Date); // true

Praktische Anwendungsmuster

Tiefes Kopieren von Objekten

JSON kann für schnelles Deep Copying von Objekten verwendet werden, obwohl diese Methode Einschränkungen hat:

const original = {
  name: "Project",
  data: { items: [1, 2, 3] }
};

const copy = JSON.parse(JSON.stringify(original));
copy.data.items.push(4);

console.log(original.data.items); // [1, 2, 3]
console.log(copy.data.items); // [1, 2, 3, 4]

Es ist wichtig zu wissen, dass diese Methode keine Funktionen, Zeichen, undefinierte Werte kopiert und Objektprototypen verliert.

Speichern von Daten in localStorage

JSON ist ideal zum Serialisieren von Daten, bevor sie im Browser gespeichert werden:

// Speichern
const settings = {
  theme: 'dark',
  language: 'ru',
  notifications: true
};
localStorage.setItem('settings', JSON.stringify(settings));

// Laden
const savedSettings = JSON.parse(localStorage.getItem('settings'));

Arbeit mit API

Moderne APIs verwenden JSON als Hauptformat für den Datenaustausch:

// Daten werden an den Server gesendet
async function createUser(userData) {
  const response = await fetch('/api/users', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify(userData)
  });
  
  return await response.json();
}

// Anwendung
const newUser = await createUser({
  name: "Maria",
  email: "maria@example.com"
});

Häufige Fehler und ihre Lösungen

Zyklische Links

JSON.stringify () löst einen Fehler aus, wenn zyklische Verweise vorhanden sind:

const obj = { name: "test" };
obj.self = obj;

// TypeError: Converting circular structure to JSON
// JSON.stringify(obj);

// Lösung mit WeakSet
function stringifyWithCircular(obj) {
  const seen = new WeakSet();
  return JSON.stringify(obj, (key, value) => {
    if (typeof value === "object" && value !== null) {
      if (seen.has(value)) {
        return "[Circular]";
      }
      seen.add(value);
    }
    return value;
  });
}

Ungültiges JSON

Verwenden Sie bei der Arbeit mit externen Datenquellen immer die Fehlerbehandlung:

function safeJsonParse(jsonString, fallback = null) {
  try {
    return JSON.parse(jsonString);
  } catch (error) {
    console.error('JSON parsing error:', error.message);
    return fallback;
  }
}

const data = safeJsonParse(userInput, {});

Verlust spezieller Datentypen

JSON unterstützt keine Datumsangaben, regulären Ausdrücke und andere spezielle Typen:

const data = {
  created: new Date(),
  pattern: /test/gi
};

const json = JSON.stringify(data);
// {"created":"2024-11-21T10:00:00.000Z","pattern":{}}

// Lösung: Erstellen benutzerdefinierter toJSON-Methoden
data.created.toJSON = function() {
  return { _type: 'Date', value: this.toISOString() };
};

JSON-Schema: Datenvalidierung

JSON Schema ist ein Wörterbuch zur Beschreibung und Validierung der Struktur von JSON-Daten:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "age": {
      "type": "integer",
      "minimum": 0,
      "maximum": 150
    },
    "email": {
      "type": "string",
      "format": "email"
    }
  },
  "required": ["name", "email"]
}

Die Verwendung von JSON Schema hilft, die Datenintegrität in großen Anwendungen sicherzustellen und eine API-Dokumentation zu erstellen.

Leistung und Optimierung

Bei der Arbeit mit großen Datenmengen ist es wichtig, die Leistung von JSON-Operationen zu berücksichtigen:

// Vermeiden Sie mehrfaches Parsing
// Schlecht
for (let i = 0; i < 1000; i++) {
  const data = JSON.parse(jsonString);
  processData(data);
}

// Gut
const data = JSON.parse(jsonString);
for (let i = 0; i < 1000; i++) {
  processData(data);
}

// Verwenden Sie Streaming für große Dateien
async function processLargeJsonFile(url) {
  const response = await fetch(url);
  const reader = response.body.getReader();
  const decoder = new TextDecoder();
  
  // Teilweise Verarbeitung
  while (true) {
    const { done, value } = await reader.read();
    if (done) break;
    const chunk = decoder.decode(value, { stream: true });
    // Chunk-Verarbeitung
  }
}

Sicherheit bei der Arbeit mit JSON

Schutz vor JSON-Injektionen

Bei der Arbeit mit Benutzereingaben ist es wichtig, eine direkte Verkettung von Zeilen zu vermeiden:

// Nicht sicher
const userInput = getUserInput();
const jsonString = '{"data":"' + userInput + '"}';

// Sicher
const jsonString = JSON.stringify({ data: userInput });

Validierung der Eingabedaten

Validieren Sie immer Daten, die aus externen Quellen stammen:

function validateUserData(data) {
  if (!data || typeof data !== 'object') {
    throw new Error('Incorrect data format');
  }
  
  if (!data.name || typeof data.name !== 'string') {
    throw new Error('Required name field is missing');
  }
  
  if (data.age && (typeof data.age !== 'number' || data.age < 0)) {
    throw new Error('Invalid age value');
  }
  
  return true;
}

Befund

JSON ist aufgrund seiner Einfachheit, Vielseitigkeit und breiten Unterstützung zu einem festen Bestandteil der modernen Entwicklung geworden. Das Verständnis der Feinheiten dieses Formats, die Kenntnis gängiger Muster und potenzieller Probleme hilft, zuverlässigere und produktivere Anwendungen zu erstellen. Unabhängig davon, ob Sie mit APIs, Konfigurationsdateien oder lokalen Datenspeichern arbeiten, bleibt JSON ein zuverlässiges Werkzeug für den strukturierten Informationsaustausch.

Möchten Sie Ihr Wissen in JavaScript und anderen Web-Entwicklungstechnologien vertiefen?

Treten Sie der Bildungsplattform bei Kodik, wo Sie interaktive Kurse in JavaScript, Python, HTML, CSS und anderen gefragten Technologien finden. Kodik hilft angehenden Entwickler*innen, das Programmieren durch praktische Aufgaben und strukturiertes Lernen zu erlernen.

Schließen Sie sich auch unserem Telegram-Kanal, wo Sie Unterstützung von erfahrenen Entwicklern erhalten, komplexe Probleme diskutieren und über die neuesten Entwicklungen in der Welt der Entwicklung auf dem Laufenden bleiben können!

🎯Hör auf zu zögern

Artikel gefallen?
Zeit zum Üben!

Bei Kodik liest du nicht nur — du schreibst sofort Code. Theorie + Praxis = echte Skills.

Sofortige Praxis
🧠KI erklärt Code
🏆Zertifikat

Keine Registrierung • Keine Karte