Python Academy · Oppitunti

Sisäkkäisten JSON-rakenteiden käsittely

Liikkukaa monimutkaisissa sisäkkäisissä JSON-olioissa ja muokatkaa niitä.

Oppitunti 2/414 vaihetta

Sisäkkäisten JSON-rakenteiden käsittely on ilmainen Python Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Python Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Python Academy-kurssilla on yhteensä 4 oppituntia.

Johdanto

Käytännön JSON on usein syvästi sisäkkäistä. Sisäkkäisten rakenteiden käsittelyn, muuntamisen ja validoinnin hallitseminen on olennaista.

Sisäkkäisten avainten käyttäminen

data['user']['address']['city'] kulkee sisäkkäisten sanakirjojen läpi. Käyttäkää kullakin tasolla .get()-metodia puuttuvien avainten käsittelemiseksi.
import json
data = {'user': {'address': {'city': 'NYC', 'zip': '10001'}}}
print(data['user']['address']['city'])

Turvallinen sisäkkäinen käyttö

data.get('user', {}).get('address', {}).get('city') ketjuttaa .get()-kutsut turvallisesti.
data = {'user': {'name': 'Alice'}}
city = data.get('user', {}).get('address', {}).get('city', 'unknown')
print(city)

Olioiden muodostamien taulukoiden läpikäynti

JSON-taulukot, joiden alkiot ovat olioita, ovat sanakirjojen luetteloita. Käykää ne läpi for-silmukalla.
import json
data = json.loads('[{"name":"Alice"},{"name":"Bob"}]')
for user in data:
    print(user['name'])

Sisäkkäisen JSONin litistäminen

Kirjoittakaa rekursiivinen funktio, joka litistää sisäkkäiset sanakirjat litteäksi sanakirjaksi pisteillä eroteltuja avaimia käyttäen.
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}))

Taulukoiden suodattaminen

[user for user in data if user.get('active')] suodattaa JSON-taulukon ehdon perusteella.
data = [{'name':'A','active':True},{'name':'B','active':False}]
active = [u for u in data if u.get('active')]
print(active)

Sisäkkäisten tietojen muuntaminen

Poimikaa kenttä jokaisesta sisäkkäisestä oliosta: [item['name'] for item in data]
data = [{'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bob'}]
names = [d['name'] for d in data]
print(names)

Skeeman validointi jsonschemalla

pip install jsonschema. jsonschema.validate(instance, schema) nostaa ValidationError-poikkeuksen, jos tiedot eivät ole kelvollisia.
# from jsonschema import validate
# schema = {'type':'object','required':['name']}
# validate({'name':'Alice'}, schema)  # OK
# validate({}, schema)  # raises ValidationError
print('schema validation demo')

Sisäkkäisten sanakirjojen syväpäivitys

Pinnallinen dict.update() ei yhdistä sisäkkäisiä sanakirjoja. Kirjoittakaa rekursiivinen deep_update sisäkkäistä yhdistämistä varten.
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-tyyliset kyselyt Pythonilla

Käyttäkää monimutkaisiin kyselyihin jq-kirjastoa tai mukautettua rekursiivista hakua: 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')))

Serialisointi NDJSON-muotoon

Rivinvaihdolla eroteltu JSON (NDJSON): yksi JSON-objekti rivillä. Kirjoittakaa muodossa 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)

Pikatarkistus

Mitä data.get('key', {}).get('nested') palauttaa, kun 'key' puuttuu?

Kertaus

Sisäkkäinen JSON: ketjuttakaa .get()-kutsuja turvallista käyttöä varten. Käykää taulukot läpi for-silmukalla. Litistäkää rakenne rekursion avulla. Suodattakaa list comprehension -lausekkeella. Käyttäkää jsonschemaa validointiin.

Jatkakaa

Jatkakaa samaan tapaan! Siirtykää seuraavaan oppituntiin.
Aloita maksutta

Opi Python tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
76
Oppitunnit
320

Usein kysytyt kysymykset

Onko oppitunti ”Sisäkkäisten JSON-rakenteiden käsittely” ilmainen?

Kyllä – oppitunnin ”Sisäkkäisten JSON-rakenteiden käsittely” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Python Academy-kurssin, päivitä CoddyKit PROhon. Python Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Sisäkkäisten JSON-rakenteiden käsittely”?

Liikkukaa monimutkaisissa sisäkkäisissä JSON-olioissa ja muokatkaa niitä. Harjoittelet Python Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Python Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Python Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Sisäkkäisten JSON-rakenteiden käsittely”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Python Academy-oppitunnilla?

Kyllä. Jokainen Python Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. JSON-koodaus ja -dekoodaus
  2. Sisäkkäisten JSON-rakenteiden käsittely
  3. CSV-tiedostojen lukeminen csv.readerillä
  4. CSV-tiedostoihin kirjoittaminen csv.DictWriterillä
← Takaisin: Python Academy