Python Academy · leksjon

Håndtere nestede JSON-strukturer

Naviger i og transformer komplekse, nestede JSON-objekter.

Leksjon 2 av 414 trinn

Håndtere nestede JSON-strukturer er en gratis leksjon i Python Academy på CoddyKit. Dette er leksjon 2 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 Python Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Python Academy inneholder totalt 4 leksjoner.

Innledning

JSON fra virkelige prosjekter er dypt nestet. Det er viktig å kunne navigere i, transformere og validere nestede strukturer.

Få tilgang til nestede nøkler

data['user']['address']['city'] navigerer i nestede dict-er. Bruk .get() på hvert nivå for å håndtere manglende nøkler.
import json
data = {'user': {'address': {'city': 'NYC', 'zip': '10001'}}}
print(data['user']['address']['city'])

Trygg tilgang til nestede data

data.get('user', {}).get('address', {}).get('city') kjeder sammen .get()-kall på en trygg måte.
data = {'user': {'name': 'Alice'}}
city = data.get('user', {}).get('address', {}).get('city', 'unknown')
print(city)

Iterere over arrayer med objekter

JSON-arrayer med objekter er lister med dict-er. Iterer over dem med en for-løkke.
import json
data = json.loads('[{"name":"Alice"},{"name":"Bob"}]')
for user in data:
    print(user['name'])

Flatgjøre nestet JSON

Skriv en rekursiv funksjon som flatgjør nestede dict-er til en flat dict med punktumseparerte nøkler.
def flatten(d, prefix=''):
    result = {}
    for k, v in d.items():
        key = f'{prefix}.{k}' if prefix else k
        if isinstance(v, dict):
            result.update(flatten(v, key))
        else:
            result[key] = v
    return result
print(flatten({'a': {'b': {'c': 1}}, 'd': 2}))

Filtrere arrayer

[user for user in data if user.get('active')] filtrerer en JSON-array etter en betingelse.
data = [{'name':'A','active':True},{'name':'B','active':False}]
active = [u for u in data if u.get('active')]
print(active)

Transformere nestede data

Trekk ut et felt fra hvert nestede objekt: [item['name'] for item in data]
data = [{'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bob'}]
names = [d['name'] for d in data]
print(names)

Skjemavalidering med jsonschema

pip install jsonschema. jsonschema.validate(instance, schema) utløser ValidationError for ugyldige data.
# from jsonschema import validate
# schema = {'type':'object','required':['name']}
# validate({'name':'Alice'}, schema)  # OK
# validate({}, schema)  # raises ValidationError
print('schema validation demo')

Dyp oppdatering av nestede dict-er

Shallow dict.update() slår ikke sammen nestede dict-er. Skriv en rekursiv deep_update for å slå sammen nestede strukturer.
def deep_update(base, override):
    for k, v in override.items():
        if isinstance(v, dict) and isinstance(base.get(k), dict):
            deep_update(base[k], v)
        else:
            base[k] = v
    return base
result = deep_update({'a': {'x': 1}}, {'a': {'y': 2}})
print(result)

jq-lignende spørringer med Python

For komplekse spørringer bruker du jq-biblioteket eller et egendefinert rekursivt søk: find_all(data, 'key').
def find_all(obj, key):
    if isinstance(obj, dict):
        if key in obj: yield obj[key]
        for v in obj.values(): yield from find_all(v, key)
    elif isinstance(obj, list):
        for item in obj: yield from find_all(item, key)
data = {'a': {'name': 'x'}, 'b': [{'name': 'y'}]}
print(list(find_all(data, 'name')))

Serialisering til NDJSON

Linjedelt JSON (NDJSON): ett JSON-objekt per linje. Skriv med json.dumps(obj) + '\n'.
import json
objects = [{'id': 1}, {'id': 2}, {'id': 3}]
ndjson = '\n'.join(json.dumps(o) for o in objects)
print(ndjson)

Hurtigsjekk

Hva returnerer data.get('key', {}).get('nested') når 'key' mangler?

Oppsummering

Nested JSON: kjed .get() for trygg tilgang. Gå gjennom arrayer med for. Flate ut med rekursjon. Filtrer med list comprehension. Bruk jsonschema til validering.

Fortsett

Fortsett slik! Gå videre til neste leksjon.
Gratis å komme i gang

Lær deg Python 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
76
Leksjoner
320

Ofte stilte spørsmål

Er leksjonen «Håndtere nestede JSON-strukturer» gratis?

Ja – hele teksten i «Håndtere nestede JSON-strukturer» 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 Python Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Python Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Håndtere nestede JSON-strukturer»?

Naviger i og transformer komplekse, nestede JSON-objekter. Du øver på Python 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 Python Academy?

Ingen tidligere erfaring er nødvendig. Python 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 2 av 4.

Hvor lang tid tar leksjonen «Håndtere nestede JSON-strukturer»?

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 Python Academy-leksjonen?

Ja. Alle Python 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. JSON-koding og -dekoding
  2. Håndtere nestede JSON-strukturer
  3. Lese CSV med csv.reader
  4. Skrive CSV med csv.DictWriter
← Tilbake til Python Academy