2.28. JSON¶
JSON (JavaScript Object Notation) on tiivis, ihmisluettava tekstimuoto jäsennellylle datalle. Se määrittelee kuusi tyyppiä – string, number, boolean, null, array ja object – joista kukin vastaa suoraan jotain Python-arvoa, joten Pythonin ja JSONin välinen muunnos on yksittäinen funktiokutsu kumpaankin suuntaan.
JSON on asetustiedostojen ja web-rajapintojen yleiskieli. Tartu siihen aina, kun sinun täytyy tallentaa pieni nippu asetuksia levylle myös silmin luettavassa muodossa tai vaihtaa jäsenneltyä dataa toisen ohjelman kanssa.
Kaksi funktiota kattaa useimmat tarpeet:
json.dumps()– dump string: muuntaa Python-arvon JSON-merkkijonoksi.json.loads()– load string: jäsentää JSON-merkkijonon takaisin Pythoniksi.
Pari json.dump / json.load (ilman s -kirjainta) tekee saman työn, mutta ottaa tiedosto-olion suoraan.
2.28.1. Enkoodaus (dumps)¶
import json
config = {
"name": "OpenMV",
"width": 320,
"tags": ["red", "round"],
}
text = json.dumps(config)
print(text)
Tuloste:
{"name": "OpenMV", "width": 320, "tags": ["red", "round"]}
Vastaavuus on:
Mikä tahansa tämän joukon ulkopuolinen (mukautettu luokka, bytes -puskuri, set) nostaa TypeError -poikkeuksen. Muunna arvo ensin.
Muista
CPythonin json.dumps() hyväksyy indent -argumentin siistitysti muotoiltua tulostetta varten; MicroPythonin ei. Ainoa muotoilunuppi on separators, joka hallitsee sisäistä välistystä – anna (',', ':') tiiveimpään muotoon. Monirivinen, sisennetty tuloste on tarvittaessa tuotettava käsin.
2.28.2. Dekoodaus (loads)¶
text = '{"name": "OpenMV", "width": 320}'
config = json.loads(text)
print(config["name"], config["width"])
Tuloste:
OpenMV 320
JSON-objekteista tulee dict, taulukoista list, ja loput vastaavat takaisin Python-vastineitaan. Virheellinen JSON nostaa ValueError -poikkeuksen.
2.28.3. Tiedostojen lukeminen ja kirjoittaminen¶
Tiedostopohjainen pari toimii hyvin with -lauseen kanssa:
import json
with open("config.json") as f:
config = json.load(f)
config["width"] = 640
with open("config.json", "w") as f:
json.dump(config, f)
Käsittele JSON-tiedostoa kokonaisena tietueena – lue se sisään, muokkaa Python-arvoa, kirjoita se takaisin. JSONin muokkaaminen paikallaan tiedoston sisällä luo yleensä enemmän bugeja kuin säästää.