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.