Python Academy · Lektion

Håndtering af indlejrede JSON-strukturer

Navigér i og transformér komplekse indlejrede JSON-objekter.

Lektion 2 af 414 trin

Håndtering af indlejrede JSON-strukturer er en gratis Python Academy-lektion på CoddyKit. Dette er lektion 2 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 Python Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Python Academy-kurset indeholder 4 lektioner i alt.

Introduktion

JSON fra virkeligheden er dybt indlejret. Det er vigtigt at vide, hvordan du navigerer i, transformerer og validerer indlejrede strukturer.

Adgang til indlejrede nøgler

data['user']['address']['city'] navigerer gennem indlejrede dicts. Brug .get() på hvert niveau til at håndtere manglende nøgler.
import json
data = {'user': {'address': {'city': 'NYC', 'zip': '10001'}}}
print(data['user']['address']['city'])

Sikker adgang til indlejrede data

data.get('user', {}).get('address', {}).get('city') kæder .get()-kald sikkert sammen.
data = {'user': {'name': 'Alice'}}
city = data.get('user', {}).get('address', {}).get('city', 'unknown')
print(city)

Gennemløb af arrays med objekter

JSON-arrays med objekter er lister af dicts. Gennemløb dem med en for-løkke.
import json
data = json.loads('[{"name":"Alice"},{"name":"Bob"}]')
for user in data:
    print(user['name'])

Fladgøring af indlejret JSON

Skriv en rekursiv funktion for at fladgøre indlejrede dicts til en flad dict med punktumadskilte nøgler.
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}))

Filtrering af arrays

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

Transformation af indlejrede data

Udtræk et felt fra hvert indlejret 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)

Skemavalidering med jsonschema

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

Dyb opdatering af indlejrede dicts

En overfladisk dict.update() fletter ikke indlejrede dicts sammen. Skriv en rekursiv deep_update til sammenfletning på flere niveauer.
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 forespørgsler med Python

Brug jq-biblioteket eller en brugerdefineret rekursiv søgning til komplekse forespørgsler: 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

JSON med ét objekt pr. linje (NDJSON): ét JSON-objekt pr. 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)

Hurtigt tjek

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

Opsummering

Indlejret JSON: kæd .get() sammen for sikker adgang. Gennemløb arrays med for. Fladgør med rekursion. Filtrér med list comprehension. Brug jsonschema til validering.

Fortsæt

Bliv ved på den gode måde! Gå videre til den næste lektion.
Gratis at komme i gang

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

Ofte stillede spørgsmål

Er lektionen “Håndtering af indlejrede JSON-strukturer” gratis?

Ja — hele teksten til “Håndtering af indlejrede JSON-strukturer” 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 Python Academy-kurset, skal du opgradere til CoddyKit PRO. Python Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Håndtering af indlejrede JSON-strukturer”?

Navigér i og transformér komplekse indlejrede JSON-objekter. Du øver dig i Python 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å Python Academy?

Der kræves ingen tidligere erfaring. Python 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 2 af 4.

Hvor lang tid tager lektionen “Håndtering af indlejrede JSON-strukturer”?

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

Ja. Alle Python 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. JSON-kodning og -afkodning
  2. Håndtering af indlejrede JSON-strukturer
  3. Læsning af CSV med csv.reader
  4. Skrivning af CSV med csv.DictWriter
← Tilbage til Python Academy