2.28. JSON¶
JSON (JavaScript Object Notation) är ett kompakt, läsbart textformat för strukturerad data. Det definierar sex typer – sträng, tal, boolesk, null, array och objekt – som var och en mappas direkt mot ett Python-värde, så att konvertera mellan Python och JSON är ett enda funktionsanrop i endera riktningen.
JSON är lingua franca för konfigurationsfiler och webb-API:er. Använd det när du behöver spara ett litet paket med inställningar till disk i en form du också kan läsa med ögat, eller utbyta strukturerad data med ett annat program.
Två funktioner täcker de flesta behov:
json.dumps()– dump string: gör om ett Python-värde till en JSON-sträng.json.loads()– load string: tolkar en JSON-sträng tillbaka till Python.
Paret json.dump / json.load (utan s) gör samma jobb men tar ett filobjekt direkt.
2.28.1. Kodning (dumps)¶
import json
config = {
"name": "OpenMV",
"width": 320,
"tags": ["red", "round"],
}
text = json.dumps(config)
print(text)
Utdata:
{"name": "OpenMV", "width": 320, "tags": ["red", "round"]}
Mappningen är:
Allt utanför den uppsättningen (en anpassad klass, en bytes-buffert, en set) kastar TypeError. Konvertera värdet först.
Anteckning
CPythons json.dumps() accepterar ett indent-argument för snyggt formaterad utdata; MicroPythons gör det inte. Den enda formateringsratten är separators, som styr mellanrummen på raden – skicka (',', ':') för den mest kompakta formen. Flerradig, indenterad utdata måste produceras för hand om det behövs.
2.28.2. Avkodning (loads)¶
text = '{"name": "OpenMV", "width": 320}'
config = json.loads(text)
print(config["name"], config["width"])
Utdata:
OpenMV 320
JSON-objekt blir dict, arrayer blir list, och resten mappas tillbaka till sina Python-motsvarigheter. Felaktig JSON kastar ValueError.
2.28.3. Läsa och skriva filer¶
Det filbaserade paret fungerar fint med 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)
Behandla JSON-filen som en komplett post – läs in den, modifiera Python-värdet, skriv tillbaka det. Att försöka redigera JSON på plats inuti en fil skapar oftast fler buggar än det sparar.