2.28. JSON¶
JSON (JavaScript Object Notation) je kompaktan, ljudski čitljiv tekstualni format za strukturirane podatke. Definira šest tipova – string, number, boolean, null, array i object – od kojih se svaki izravno preslikava na Python vrijednost, pa je pretvorba između Pythona i JSON-a jedan poziv funkcije u oba smjera.
JSON je zajednički jezik konfiguracijskih datoteka i web API-ja. Posegnite za njim kad god trebate spremiti mali skup postavki na disk u obliku koji možete i očima pročitati, ili razmijeniti strukturirane podatke s drugim programom.
Dvije funkcije pokrivaju većinu potreba:
json.dumps()– dump string: pretvara Python vrijednost u JSON niz.json.loads()– load string: raščlanjuje JSON niz natrag u Python.
Par json.dump / json.load (bez s) radi isti posao, ali izravno uzima objekt datoteke.
2.28.1. Kodiranje (dumps)¶
import json
config = {
"name": "OpenMV",
"width": 320,
"tags": ["red", "round"],
}
text = json.dumps(config)
print(text)
Izlaz:
{"name": "OpenMV", "width": 320, "tags": ["red", "round"]}
Preslikavanje je:
Sve izvan tog skupa (prilagođena klasa, bytes međuspremnik, set) podiže TypeError. Prvo pretvorite vrijednost.
Napomena
CPythonov json.dumps() prihvaća argument indent za lijepo oblikovani izlaz; MicroPythonov ne. Jedini regulator oblikovanja je separators, koji kontrolira razmake unutar retka – proslijedite (',', ':') za najkompaktniji oblik. Višelinijski, uvučeni izlaz mora se proizvesti ručno ako je potreban.
2.28.2. Dekodiranje (loads)¶
text = '{"name": "OpenMV", "width": 320}'
config = json.loads(text)
print(config["name"], config["width"])
Izlaz:
OpenMV 320
JSON objekti postaju dict, polja postaju list, a ostatak se preslikava natrag na svoje Python ekvivalente. Loš JSON podiže ValueError.
2.28.3. Čitanje i pisanje datoteka¶
Par baziran na datotekama lijepo se slaže s with:
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)
Tretirajte JSON datoteku kao cjelovit zapis – pročitajte je, izmijenite Python vrijednost, zapišite je natrag. Pokušaj uređivanja JSON-a na mjestu unutar datoteke obično stvori više pogrešaka nego što ih uštedi.