JSON je populární formát pro výměnu dat. Python se dodává s vestavěným modulem JSON pro analýzu a práci s daty JSON. A tento tutoriál vás naučí vše o práci s JSON v Pythonu.
Na konci tohoto tutoriálu se naučíte:
- základy JSON,
- jak analyzovat a vytvářet řetězce JSON v Pythonu a
- jak číst a zapisovat do souborů JSON v Pythonu.
Začínáme!⏳
Table of Contents
Co je JSON?
JSON je zkratka pro JavaScript Object Notation a je to textový formát pro výměnu dat. Ačkoli je JSON zpočátku inspirován objekty JavaScriptu, téměř všechny programovací jazyky podporují práci s JSON.
Pokud jste někdy pracovali s rozhraními API nebo četli konfigurační soubory, pravděpodobně jste narazili na JSON.
📑 Při dotazování na API odesíláte a přijímáte data v JSON. A JSON je také široce používán v komunikaci klient-server v softwarových aplikacích. Kromě toho můžete JSON použít také pro univerzální ukládání dat.
Formát JSON je velmi podobný formátu slovníku Pythonu. Slovníky jsou výkonné vestavěné datové struktury v Pythonu, které ukládají data v párech klíč-hodnota.
Než půjdeme dále, zde je několik bodů, které stojí za zmínku:
- V Pythonu je objekt JSON uložen jako slovník.
- Pole v JSON je uloženo jako seznam Pythonu.
- V JSON jsou booleovské hodnoty označeny jako true a false. V Pythonu jsou tyto převedeny na logické hodnoty True a False.
Další podrobnosti o typech dat, které se překládají z JSON do Pythonu, najdete v dokumentech tady.
Protože je modul json součástí standardní knihovny Pythonu, nemusíte jej instalovat. Můžete importovat do svého aktuálního adresáře takto:
import json
Jak načíst řetězec JSON v Pythonu
Obecná syntaxe pro načtení řetězce JSON v Pythonu je:
<dict_obj> = json.loads(<json_str>)
Tady,
je slovník Pythonu, do kterého chcete načíst řetězec JSON, je libovolný platný řetězec JSON.
Tím se načte
Pojďme kódovat příklad. Zde json_str je řetězec JSON.
json_str=""' { "books": [ { "title": "The Wind in the Willows", "author": "Kenneth Grahame", "year": "1908" }, { "title": "To the Lighthouse", "author": "Virginia Woolf", "year": "1927" } ] } '''
A níže uvedený úryvek kódu ukazuje, jak můžete načíst řetězec JSON json_str do slovníku Pythonu pomocí metody loads(). K ověření, že py_dict je slovník Pythonu, můžete použít vestavěnou funkci type().
py_dict = json.loads(json_str) type(py_dict) # Output: dict print(py_dict) # Output {'books': [{'title': 'The Wind in the Willows', 'author': 'Kenneth Grahame', 'year': '1908'}, {'title': 'To the Lighthouse', 'author': 'Virginia Woolf', 'year': '1927'}]}
Jak je znázorněno ve výše uvedeném kódu, všechna pole v řetězci JSON jsou páry klíč–hodnota v py_dict.
Jak vytvořit JSON řetězce v Pythonu
Předpokládejme, že máte pythonovský slovník. Jak z něj tedy vytvoříte řetězec JSON?
Můžete to udělat pomocí metody dumps() s touto syntaxí:
<json_str> = json.dumps(<dict_obj>)
Tady,
je slovník Pythonu, ze kterého chcete vytvořit řetězec JSON, je výsledný řetězec JSON.
Metoda dumps() tedy vypíše
Do našeho stávajícího slovníku Python py_dict. pojďme přidat nový klíč „filmy“. Můžete to udělat, jak je znázorněno v následujícím fragmentu kódu:
py_dict["movies"] = [{"title":"The Imitation Game","year":"2014", "lang":"en","watched":True}]
Nyní vypišme upravený slovník do nového řetězce JSON json_str2 pomocí metody dumps().
json_str2 = json.dumps(py_dict) print(json_str2) # Output {"books": [{"title": "The Wind in the Willows", "author": "Kenneth Grahame", "year": "1908"}, {"title": "To the Lighthouse", "author": "Virginia Woolf", "year": "1927"}], "movies": [{"title": "The Imitation Game", "year": "2014", "lang": "en", "watched": true}]}
Jak můžete vidět ve výše uvedeném příkladu, výstupní řetězec JSON je obtížné přečíst bez správného formátování. Pro přidání odsazení můžete použít volitelný parametr odsazení.
A můžete to udělat nastavením odsazení na celé číslo jako 2, jak je znázorněno níže:
json_str2 = json.dumps(py_dict, indent = 2) print(json_str2) # Output { "books": [ { "title": "The Wind in the Willows", "author": "Kenneth Grahame", "year": "1908" }, { "title": "To the Lighthouse", "author": "Virginia Woolf", "year": "1927" } ], "movies": [ { "title": "The Imitation Game", "year": "2014", "lang": "en", "watched": true } ] }
Sledujte, jak byl výstup formátován s odsazením, a je snadné jej sledovat.
Poznámka: 💡 Pokud chcete, aby byly klíče seřazeny v abecedním pořadí, můžete parametr sort_keys nastavit na True.
Jak můžete vidět ve fragmentu kódu níže, klíče jsou nyní seřazeny v abecedním pořadí.
json_str2 = json.dumps(py_dict, indent = 2, sort_keys=True) print(json_str2) # Output { "books": [ { "author": "Kenneth Grahame", "title": "The Wind in the Willows", "year": "1908" }, { "author": "Virginia Woolf", "title": "To the Lighthouse", "year": "1927" } ], "movies": [ { "lang": "en", "title": "The Imitation Game", "watched": true, "year": "2014" } ]
A klíče se nyní zobrazují v abecedním pořadí: „autor“, „název“ a „rok“.
Zatím jste se naučili pracovat s řetězci JSON v Pythonu. V další části se dozvíte, jak pracovat se soubory JSON.
Jak číst soubor JSON v Pythonu
Chcete-li číst soubor JSON v Pythonu, použijte následující syntaxi:
json.load(<json-file>) # where <json-file> is any valid JSON file.
Všimněte si, jak používáme metodu load() a nikoli metodu loads(). loads() načte řetězec JSON, zatímco load() načte soubor JSON.
Při práci se soubory v Pythonu byste měli zvážit použití kontextových manažerů. Můžete také zkusit číst soubory následujícím způsobem bez použití kontextového správce:
my_file = open('students.json','r') contents = my_file.read() print(contents) file.close()
Pokud soubor nezavřete, může dojít k potenciálnímu plýtvání zdroji.
Při práci s kontextovými manažery se však soubory po dokončení operací se soubory automaticky zavřou.
A ke čtení souborů můžete použít kontextový manažer, jak je znázorněno níže:
with open('students.json','r') as file: data = json.load(file) print(data) # Output {'students': [{'roll_num': 'cs27', 'name': 'Anna', 'course': 'CS'}, {'roll_num': 'ep30', 'name': 'Kate', 'course': 'PHY'}]}
Když čtete ze souboru, určete režim jako čtení – označený „r“ ve výše uvedeném kódu.
Poznámka: Abyste mohli snadno procházet aktuálním adresářem, ujistěte se, že soubor JSON je ve stejné složce jako main.py, jak je znázorněno na obrázku níže. Pokud je váš soubor JSON v jiné složce, nezapomeňte zadat cestu k souboru.
Přečtěte si soubor JSON v Pythonu.
V další části se dozvíte, jak zapisovat do souboru JSON.✍
Jak zapisovat do souboru JSON v Pythonu
Chcete-li zapsat do existujícího souboru JSON nebo vytvořit nový soubor JSON, použijte metodu dump() podle obrázku:
json.dump(<dict_obj>,<json_file>) # where <dict_obj> is a Python dictionary # and <json_file> is the JSON file
Výše uvedená syntaxe tedy ukládá slovník
V předchozí části jsme měli slovník py_dict. Nyní to přeneseme do nového souboru JSON. A pojmenujme to new_file.json.
A následující buňka kódu ukazuje, jak můžete použít funkci dump():
with open('new_file.json','w') as file: json.dump(py_dict,file)
Poznámka: Otevřením souboru v režimu zápisu (w) se přepíše obsah, pokud soubor existuje. Pokud soubor neexistuje, je vytvořen.
Po provedení výše uvedené buňky kódu uvidíte, že v aktuálním pracovním adresáři byl vytvořen nový soubor JSON. A můžete pokračovat a prozkoumat obsah souboru JSON.
Vytvořte soubor JSON v Pythonu
Při zápisu do souborů je hlavním cílem ukládání dat. A pokud byste chtěli zachovat formátování, můžete také použít parametry indent a sort_keys.
Závěr
⏲ Je čas na rychlé shrnutí.
V tomto tutoriálu jste se naučili:
- základy používání JSON,
- jak používat metody loads() a load() ke čtení řetězce JSON a souborů JSON,
- jak používat metody dumps() a dump() k výpisu slovníků Pythonu do řetězců JSON a souborů JSON.
Doufám, že vám tento návod pomohl. Šťastné učení!
Můžete se také podívat na nástroje JSON pro analýzu, formátování a ověření.