Kódím.cz
6

JSON

Díky formátu JSON je můžeme snadno ukládat nebo například stahovat z internetu.

Formát JSON

JSON je formát pomocí kterého můžeme zapsat strukturovaná data jako čistý text. S jedním takovým datovým formátem jste se již potkali, jmenuje se CSV.

JSON formát původně pochází z jazyka, který se jmenuje JavaScript. Ten se hodně používá pro tvorbu webových stránek a jelikož výměna dat nejčastěji probíhá po internetu, ujal se formát JSON všeobecně jako standard pro výměnu dat mezi programy. Výhoda pro nás je, že JSON vypadá téměř stejně jako Python slovníky. Liší se pouze tím, že vždy používá dvojité uvozovky a hodnoty True a False se píší s malým písmenem, tedy true a false. Náš absolvent kurzu z úvody lekce by tedy ve formátu JSON vypadal takto:

{
    "jmeno": "Petr",
    "prijmeni": "Roman",
    "rok": 2017,
    "dochazka": 0.95,
    "vyznamenani": true
}

Čtení JSON dat

V Pythonu je velice jednoduché převést JSON na obyčejný Python slovník. Stačí nám k tomu modul jménem json. Vyzkoušíme si to na našem seznamu absolventů. Nejdřív si tato data stáhneme jako soubor absolventi.json. Ten pak můžeme v Pythonu otevřít a převést na JSON následujícím programem.

import json
with open('absolventi.json', encoding='utf-8') as file:
    absolvents = json.load(file)
print(absolvents)

Zápis JSON dat

Zápis JSON dat do souboru je podobně jednoduché jako čtení. Stačí si osvojit funkci dump. Dejme tomu, že máme jednoduchý JSON, který obsahuje například odpracované hodiny pro každý den v týdnu. Ten chceme zapsat do textového souboru.

import json
hours = {'po': 8, 'ut': 7, 'st': 6, 'ct': 7, 'pa': 8}
with open('hodiny.json', mode='w', encoding='utf-8') as file:
    json.dump(hours, file)

Diakritika v JSON

Funkce json.dump() ve výchozím nastavení překóduje non-ASCI znaky do jejich číselného kódu:

import json
data = {"řeřicha": "Česká Třebová"}

with open("rericha.json", mode="w", encoding="utf-8") as output_file:
    json.dump(data, output_file)  # soubor obsahuje {"\u0159e\u0159icha": "\u010cesk\u00e1 T\u0159ebov\u00e1"}

Pokud chceš mít výstupní JSON v plném kódování UTF-8, lze toho dosáhnout volitelným parametrem ensure_ascii=False.

Složitější JSON struktury

Ve formátu JSON můžeme narazit i na složitější struktury. Uvažujme výsledky běžeckého závodu, které jsou uložené v souboru zavod.json. Struktura je složitější tím, že v sobě obsahuje zanořené slovníky. Data si nejprve uložíme do proměnné runners.

import json
with open('zavod.json', encoding='utf-8') as file:
    runners = json.load(file)

Strukturu dat si můžeme pro přehlednost znázornit graficky. Obrázek v plné velikosti je zde.

Do proměnné winner si nyní načtěme informace o prvku seznamu na nulté pozici, což jsou data o vítězi závodu.

winner = runners[0]

Obsah proměnné winner si opět můžeme zobrazit graficky.

I do této struktury se můžeme ponořit hlouběji. Pokud bychom chtěli například zjistit oficiální čas vítěze, napíšeme:

winner_time = winner["casy"]["oficialni"]

Cvičení: JSON

Bonus