0Pricing
Python Academy · Lekcja

Praca z zagnieżdżonymi strukturami JSON

Proszę poruszać się po złożonych, zagnieżdżonych obiektach JSON i przekształcać je.

Praca z zagnieżdżonymi strukturami JSON to bezpłatna lekcja Python Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Python Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Python Academy zawiera 4 lekcji w sumie.

Wprowadzenie

JSON w rzeczywistych zastosowaniach jest głęboko zagnieżdżony. Umiejętność nawigowania po zagnieżdżonych strukturach, przekształcania ich i sprawdzania ich poprawności jest niezbędna.

Dostęp do zagnieżdżonych kluczy

data['user']['address']['city'] nawiguje po zagnieżdżonych słownikach dict. Używaj .get() na każdym poziomie, aby obsługiwać brakujące klucze.
import json
data = {'user': {'address': {'city': 'NYC', 'zip': '10001'}}}
print(data['user']['address']['city'])

Bezpieczny dostęp do zagnieżdżonych danych

data.get('user', {}).get('address', {}).get('city') bezpiecznie łączy wywołania .get().
data = {'user': {'name': 'Alice'}}
city = data.get('user', {}).get('address', {}).get('city', 'unknown')
print(city)

Iterowanie po tablicach obiektów

Tablice JSON zawierające obiekty to listy słowników dict. Iteruj po nich za pomocą pętli for.
import json
data = json.loads('[{"name":"Alice"},{"name":"Bob"}]')
for user in data:
    print(user['name'])

Spłaszczanie zagnieżdżonego JSON

Napisz funkcję rekurencyjną, która spłaszcza zagnieżdżone słowniki dict do płaskiego słownika z kluczami rozdzielonymi kropkami.
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}))

Filtrowanie tablic

[user for user in data if user.get('active')] filtruje tablicę JSON według warunku.
data = [{'name':'A','active':True},{'name':'B','active':False}]
active = [u for u in data if u.get('active')]
print(active)

Przekształcanie zagnieżdżonych danych

Wyodrębnij pole z każdego zagnieżdżonego obiektu: [item['name'] for item in data]
data = [{'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bob'}]
names = [d['name'] for d in data]
print(names)

Sprawdzanie schematu za pomocą jsonschema

pip install jsonschema. jsonschema.validate(instance, schema) zgłasza ValidationError dla nieprawidłowych danych.
# from jsonschema import validate
# schema = {'type':'object','required':['name']}
# validate({'name':'Alice'}, schema)  # OK
# validate({}, schema)  # raises ValidationError
print('schema validation demo')

Głęboka aktualizacja zagnieżdżonych słowników

Płytkie dict.update() nie scala zagnieżdżonych słowników. Napisz rekurencyjną funkcję deep_update do scalania zagnieżdżonych struktur.
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)

Zapytania w stylu jq w Pythonie

W przypadku złożonych zapytań należy użyć biblioteki jq lub własnego wyszukiwania rekurencyjnego: 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')))

Serializacja do NDJSON

JSON rozdzielany znakami nowego wiersza (NDJSON): jeden obiekt JSON w każdym wierszu. Zapis odbywa się za pomocą 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)

Szybkie sprawdzenie

Co zwraca data.get('key', {}).get('nested'), gdy brakuje elementu 'key'?

Podsumowanie

Zagnieżdżony JSON: należy łączyć wywołania .get() w celu bezpiecznego dostępu. Tablice należy iterować za pomocą for. Spłaszczanie wykonuje się rekurencyjnie. Filtrowanie — za pomocą składni list comprehension. Do walidacji należy używać jsonschema.

Kontynuuj naukę

Tak trzymać! Proszę przejść do następnej lekcji.

Często zadawane pytania

Czy lekcja „Praca z zagnieżdżonymi strukturami JSON” jest bezpłatna?

Tak — pełny tekst „Praca z zagnieżdżonymi strukturami JSON” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Python Academy, przejdź na CoddyKit PRO. Kurs Python Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Praca z zagnieżdżonymi strukturami JSON”?

Proszę poruszać się po złożonych, zagnieżdżonych obiektach JSON i przekształcać je. Ćwiczysz Python Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Python Academy?

Nie wymagamy żadnego doświadczenia. Python Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Praca z zagnieżdżonymi strukturami JSON”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Python Academy?

Tak. Każda lekcja Python Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Kodowanie i dekodowanie JSON
  2. Praca z zagnieżdżonymi strukturami JSON
  3. Odczytywanie CSV za pomocą csv.reader
  4. Zapisywanie CSV za pomocą csv.DictWriter
← Powrót do Python Academy