SQL Academy · Lektion

JSONB vs. JSON: Hvornår skal De bruge hvad

Vælg mellem JSON (tekst, bevarer mellemrum) og JSONB (binært, kan indekseres, deduplikerer nøgler) til den rigtige lagring.

Lektion 1 af 413 trin

JSONB vs. JSON: Hvornår skal De bruge hvad er en gratis SQL Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i SQL Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. SQL Academy-kurset indeholder 4 lektioner i alt.

To JSON-typer i PostgreSQL

  • JSON — gemmer den nøjagtige tekst, du indsætter
  • JSONB — opdelt binært format med deduplikerede nøgler, som kan indekseres

JSON: Tekstlagring

JSON bevarer mellemrum, nøglerækkefølge og duplikerede nøgler. Det fortolkes igen ved hver læsning. Ingen GIN-indeksering. Næsten aldrig det rigtige valg til ny kode.

INSERT INTO docs (data) VALUES ('{"a": 1, "a": 2}'::JSON);
SELECT data->'a' FROM docs;     -- whatever the parser picks

JSONB: Binært og indekserbart

JSONB:

  • Gemmes opdelt → skal ikke fortolkes igen ved læsning
  • Duplikerede nøgler sammenfoldes (den sidste vinder)
  • Nøglerækkefølgen bevares ikke
  • Understøtter GIN-indeksering
  • Understøtter avancerede stioperatorer

JSONB-eksempel

En enkel tabel til hændelser:

CREATE TABLE events (
  id BIGSERIAL PRIMARY KEY,
  ts TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  data JSONB NOT NULL
);

INSERT INTO events (data) VALUES
  ('{"type":"login","user_id":42,"ip":"1.2.3.4"}');

Stioperatorer

JSONB har avancerede operatorer (gennemgås i næste lektion):

SELECT data->'user_id'   FROM events;       -- → JSONB
SELECT data->>'user_id'  FROM events;       -- → TEXT
SELECT data #>> '{user,name}' FROM events;  -- nested text path

Indeslutning

Den mest nyttige JSONB-operator: @> (indeholder).

SELECT * FROM events WHERE data @> '{"type":"login"}';

-- Combined with a GIN index, this is fast even on billions of rows.

Lighed mellem JSONB-værdier

To JSONB-værdier er ens, hvis deres indhold matcher — nøglerækkefølgen er ligegyldig:

SELECT '{"a":1,"b":2}'::JSONB = '{"b":2,"a":1}'::JSONB;    -- TRUE

Konvertering mellem typer

Konvertér frit:

SELECT '{"a":1}'::JSONB->'a';                -- 1 (as JSONB)
SELECT ('{"a":1}'::JSONB)->>'a';             -- '1' (as TEXT)
SELECT ('{"a":1}'::JSONB)->'a'::INT;          -- 1 (as INT after extraction)

Hvornår du IKKE skal bruge JSONB

Hvis dataene har en fast struktur, skal du bruge rigtige kolonner:

  • Hurtigere forespørgsler (ingen dokumentfortolkning for hver række)
  • Stærke typer og begrænsninger
  • Mindre lagerplads
  • Bedre statistik

JSONB er bedst, når strukturen varierer eller udvikler sig hurtigt.

Hybridmodellering

Bedste praksis: strukturerede kolonner til stabile felter og JSONB til variable ekstrafelter:

CREATE TABLE events (
  id BIGSERIAL PRIMARY KEY,
  ts TIMESTAMPTZ NOT NULL,
  event_type TEXT NOT NULL,
  user_id BIGINT,
  extra JSONB NOT NULL DEFAULT '{}'::JSONB
);

Validering

JSONB gemmer al gyldig JSON. Brug CHECK-begrænsninger eller håndhævelse af skemaet i applikationslaget til strukturerede begrænsninger:

ALTER TABLE events
  ADD CONSTRAINT data_has_type CHECK (data ? 'type');

Opsummering

JSONB > JSON i næsten alle produktionssituationer.

  • JSONB: binært, indekseret og med hurtige adgangsveje
  • JSON: kun rundtur gennem tekstformatet
  • Brug JSONB til variable strukturer og rigtige kolonner til faste strukturer

Hurtigt tjek

Du designer en ny tabel til JSON-dokumenter, som brugere uploader, og som du vil forespørge efter indhold. JSON eller JSONB?

Gratis at komme i gang

Lær SQL med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
46
Lektioner
183

Ofte stillede spørgsmål

Er lektionen “JSONB vs. JSON: Hvornår skal De bruge hvad” gratis?

Ja — hele teksten til “JSONB vs. JSON: Hvornår skal De bruge hvad” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af SQL Academy-kurset, skal du opgradere til CoddyKit PRO. SQL Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “JSONB vs. JSON: Hvornår skal De bruge hvad”?

Vælg mellem JSON (tekst, bevarer mellemrum) og JSONB (binært, kan indekseres, deduplikerer nøgler) til den rigtige lagring. Du øver dig i SQL Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på SQL Academy?

Der kræves ingen tidligere erfaring. SQL Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.

Hvor lang tid tager lektionen “JSONB vs. JSON: Hvornår skal De bruge hvad”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne SQL Academy-lektion?

Ja. Alle SQL Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. JSONB vs. JSON: Hvornår skal De bruge hvad
  2. Stioperatorer: -> ->> @>
  3. Indeksering af JSONB med GIN
  4. Modellering: Hvornår JSONB er bedre end normalisering
← Tilbage til SQL Academy