SQL Academy · leksjon

JSONB kontra JSON: Når bør du bruke hva

Velg mellom JSON (tekst, bevarer mellomrom) og JSONB (binær, kan indekseres, dedupliserer nøkler) for riktig lagring.

Leksjon 1 av 413 trinn

JSONB kontra JSON: Når bør du bruke hva er en gratis leksjon i SQL Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i SQL Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i SQL Academy inneholder totalt 4 leksjoner.

To JSON-typer i PostgreSQL

  • JSON — lagrer nøyaktig teksten De legger inn
  • JSONB — dekomponert binærformat, dedupliserte nøkler, kan indekseres

JSON: tekstlagring

JSON bevarer mellomrom, nøkkelrekkefølge og dupliserte nøkler. Det analyseres på nytt ved hver lesing. Ingen GIN-indeksering. Nesten aldri det riktige valget for 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:

  • Lagres dekomponert → ingen ny analyse ved lesing
  • Dupliserte nøkler slås sammen (den siste vinner)
  • Nøkkelrekkefølgen bevares ikke
  • Støtter GIN-indeksering
  • Støtter avanserte stioperatorer

JSONB-eksempel

En enkel hendelsestabell:

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 avanserte operatorer (omtalt i neste leksjon):

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

Inneholder

Den mest nyttige JSONB-operatoren: @> (inneholder).

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

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

Likhet for JSONB

To JSONB-verdier er like hvis innholdet samsvarer — nøkkelrekkefølgen har ingen betydning:

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

Typekonvertering mellom typer

Foreta typekonvertering fritt:

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)

Når JSONB IKKE bør brukes

Hvis dataene har en fast struktur, bør De bruke vanlige kolonner:

  • Raskere spørringer (ingen dokumentanalyse per rad)
  • Strenge typer og begrensninger
  • Mindre lagringsbehov
  • Bedre statistikk

JSONB er best når strukturen varierer eller utvikler seg raskt.

Hybridmodellering

Beste praksis: strukturerte kolonner for stabile felt, JSONB for variable tillegg:

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 lagrer all gyldig JSON. For strukturerte begrensninger kan De bruke CHECK-begrensninger eller håndheve skjemaet i applikasjonslaget:

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

Oppsummering

JSONB > JSON for nesten alle produksjonstilfeller.

  • JSONB: binært, indeksert, raske stier
  • JSON: bare teksttro gjengivelse
  • Bruk JSONB for variable strukturer og vanlige kolonner for faste strukturer

Hurtigsjekk

De utformer en ny tabell for JSON-dokumenter lastet opp av brukere, og dokumentene skal søkes etter innhold. Bør De velge JSON eller JSONB?

Gratis å komme i gang

Lær deg SQL med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
46
Leksjoner
183

Ofte stilte spørsmål

Er leksjonen «JSONB kontra JSON: Når bør du bruke hva» gratis?

Ja – hele teksten i «JSONB kontra JSON: Når bør du bruke hva» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av SQL Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i SQL Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «JSONB kontra JSON: Når bør du bruke hva»?

Velg mellom JSON (tekst, bevarer mellomrom) og JSONB (binær, kan indekseres, dedupliserer nøkler) for riktig lagring. Du øver på SQL Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med SQL Academy?

Ingen tidligere erfaring er nødvendig. SQL Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.

Hvor lang tid tar leksjonen «JSONB kontra JSON: Når bør du bruke hva»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne SQL Academy-leksjonen?

Ja. Alle SQL Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. JSONB kontra JSON: Når bør du bruke hva
  2. Stioperatorer: -> ->> @>
  3. Indeksering av JSONB med GIN
  4. Modellering: Når JSONB er bedre enn normalisering
← Tilbake til SQL Academy