CodeGym /Kurse /SQL SELF /Arbeiten mit JSON und JSONB

Arbeiten mit JSON und JSONB

SQL SELF
Level 33 , Lektion 0
Verfügbar

Manchmal passt die Datenstruktur nicht in klassische Strings und Zahlen. Zum Beispiel kann ein User eine Liste von Hobbys, beliebige Profileinstellungen oder verschachtelte Bestellparameter haben. Für sowas extra Tabellen zu bauen, ist einfach unpraktisch. Genau hier kommt JSON ins Spiel.

PostgreSQL unterstützt zwei Formate für solche Daten: JSON und JSONB. Beide erlauben es dir, strukturierte Daten in einer einzigen Spalte zu speichern, aber es gibt wichtige Unterschiede zwischen ihnen.

Schauen wir uns an, wie das funktioniert, wann du welches Format nutzen solltest und welche Möglichkeiten sich dadurch ergeben.

Was ist JSON

JSON (JavaScript Object Notation) ist ein textbasiertes Datenformat, das entwickelt wurde, um strukturierte Daten einfach darzustellen. Dieses Format kennt eigentlich jeder, der mit Webanwendungen arbeitet, und es ist sowohl "menschlich lesbar" als auch "leicht vom Computer zu parsen". In PostgreSQL wird dieses Format genutzt, um strukturierte Daten zu speichern und zu verarbeiten.

Hier ein Beispiel für ein JSON-Objekt:

{
  "name": "Alex Lin",
  "age": 25,
  "skills": ["SQL", "PostgreSQL", "JavaScript"],
  "address": {
    "city": "Berlin",
    "postal_code": "10115"
  }
}

Hinweis: JSON ist einfach nur Text, aber Text mit Regeln. Zum Beispiel müssen die Namen der Keys immer in Anführungszeichen stehen.

JSONB: Binary JSON

JSONB ist "binary JSON", das ebenfalls von PostgreSQL unterstützt wird. Im Gegensatz zu JSON kann JSONB indexiert werden und ist für schnelle Suche und Änderungen optimiert. Der Hauptunterschied zwischen JSON und JSONB in PostgreSQL liegt in der Art, wie sie gespeichert werden:

  • JSON wird als Text-String gespeichert, genau so, wie du die Daten übergibst.
  • JSONB wandelt die Daten in ein binäres Format um, das für die meisten Operationen effizienter ist.

JSONB gibt dir Features wie Filtern, Indexieren und Vergleichen von komplexen verschachtelten Strukturen.

Die wichtigsten Vorteile von JSONB

Warum solltest du JSONB statt JSON nehmen? Hier ein paar Gründe:

  1. Schnelleres Suchen und Filtern

JSONB ist für schnelles Auslesen gemacht. Wenn du zum Beispiel ein großes Array von Objekten hast, kannst du mit JSONB schnell das passende Element finden, ohne alles durchzugehen.

  1. Möglichkeit zur Indexierung

Mit Indexen kannst du nach Keys und Werten innerhalb von JSONB suchen – deine Queries werden richtig schnell. Wenn du JSON als Text speicherst, geht das nicht.

  1. Bequemes Arbeiten mit verschachtelten Daten

JSONB ist super für verschachtelte Strukturen. Du musst nicht zig Tabellen für hierarchische Daten bauen – alles kann kompakt in einer Spalte bleiben.

Wann solltest du JSON und wann JSONB nutzen?

  • JSON solltest du nehmen, wenn du die Daten "wie sie sind" als Text speichern willst. Zum Beispiel, wenn dir die exakte Speicherung wichtig ist oder du möglichst wenig verarbeiten willst.
  • JSONB ist praktisch, wenn du aktiv Abfragen, Filter und Änderungen machen willst oder Indexierung brauchst.

Beispiele für JSON-Objekte

Schauen wir uns ein paar Beispiele für JSON-Objekte an, um die Möglichkeiten der Struktur zu sehen.

Einfaches JSON-Objekt.

Key-Value-Struktur:

{
  "name": "Ekaterina",
  "age": 29
}

Arrays in JSON

JSON unterstützt Arrays:

{
  "skills": ["Python", "SQL", "Data Analysis"]
}

Verschachtelte Objekte

Mit JSON kannst du Layouts für komplexe Daten bauen:

{
  "name": "Andrej",
  "contacts": {
    "email": "andrey@example.com",
    "phone": "+79012345678"
  }
}

Kombinieren von Arrays und Objekten

Du kannst Arrays und Objekte kombinieren:

{
  "team": [
    {
      "name": "Elena",
      "role": "manager"
    },
    {
      "name": "Pavel",
      "role": "entwickler"
    }
  ]
}

JSON und PostgreSQL

PostgreSQL unterstützt zwei verschiedene Datentypen für JSON:

  • JSON: Textformat.
  • JSONB: Binärformat.

Eine Tabelle mit JSON- und JSONB-Spalten erstellen

Schauen wir uns an, wie du JSON/JSONB in PostgreSQL-Tabellen nutzen kannst. Zum Beispiel erstellen wir eine Tabelle, um Infos über Mitarbeiter einer Firma zu speichern:

-- Tabelle mit JSON- und JSONB-Spalten erstellen
CREATE TABLE employees (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    details JSON,    -- Text-JSON
    profile JSONB    -- Binary-JSON
);

Auf den ersten Blick sieht es so aus, als gäbe es keinen Unterschied zwischen diesen Spalten. Aber das stimmt nicht: JSON ist ideal, um Daten unverändert zu speichern, während JSONB besser für Filter und Suche ist.

-- Daten einfügen
INSERT INTO employees (name, details, profile)
VALUES
('Alex Lin', '{"age": 30, "city": "Tallinn"}', '{"skills": ["SQL", "PostgreSQL"], "hobby": "fussball"}'),
('Maya Novak', '{"age": 25, "city": "Riga"}', '{"skills": ["Python", "Machine Learning"], "hobby": "lesen"}');

JSONB-Daten auslesen

Du kannst Daten aus JSONB mit speziellen Funktionen auslesen, die wir in der nächsten Lektion anschauen. Zum Beispiel, um die Skills der Mitarbeiter zu sehen:

-- Skills auslesen
SELECT name, profile->'skills' AS skills
FROM employees;

Ergebnis:

name skills
Alex Lin ["SQL", "PostgreSQL"]
Maya Novak ["Python", "Machine Learning"]

JSON in der echten Welt

JSON (und JSONB) wird in echten Anwendungen oft genutzt. Hier ein paar Beispiele:

  1. APIs und Microservices. JSON ist das Standardformat für Datentransfer in RESTful APIs. PostgreSQL unterstützt das auf Speicher- und Verarbeitungsebene.
  2. Datenintegration. Wenn deine Datenbank Daten aus verschiedenen Systemen bekommt, ist die Arbeit mit JSONB viel angenehmer.
  3. Umgang mit komplexen Strukturen. Zum Beispiel eignet sich JSONB super für das Speichern von Fragebögen, User-Einstellungen oder Unternehmens-Metadaten.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION