Textový formát pro výměnu dat JSON je sice založen na JavaScript'u, ale podobnost vybraných konstrukcí s Python'em je tak veliká, že normální smrtelník nebude mít s jeho čtením žádnou práci.
Navíc jsou příslušné metody navrženy v úplně stejném duchu jako u modulu pickle, takže až na výchozí nastavení iskejpování ne-ASCII znaků je základní práce s modulem velmi snadná.
Asi nejčastějším použitím protokolu JSON bude výměna dat s okolním prostředím pomocí souboru, proto se podívejme nejdříve na něj:
json.dump(o, file)
– uloží pythoní objekt o v JSONí podobě do textového souboru file;
o = json.load(file)
– načte data z JSONího řetězce v textovém souboru file do pythoního objektu o.
V základním nastavení Python serializuje (objekty, které se serializovat dají) do JSON'u tak, že iskejpuje ne-ASCII znaky a nedělá žádné odsazení. Častější použití bude tudíž vypadat spíše nějak takto:
Narozdíl od modulu pickle je JSON textový formát – otevíráme proto textový soubor a musíme určit jeho kódování!
Načíst JSON'í soubor se základními datovými typy je jednodušší – až na uvedení kódování textového souboru je úplně stejně jako u modulu pickle:
Budete-li zaserializovaný objekt potřebovat v paměti, použijete následující metody (opět zcela v duchu rozhraní pro modul pickle):
po = json.dumps(o)
– převede pythoní objekt o do JSONího řetězce v proměnné po:
o = json.loads(po)
– načte JSONí řetězec po do pythoní datové struktury o:
Pythoní struktury jsou poněkud bohatší než javascriptí, nepřekvapí tudíž, že ne vše lze ve výchozím nastavení zaserializovat. Přímo jsou podporovány následující datové typy:
Python | JSON |
---|---|
dict |
object |
list , tuple |
array |
str |
string |
int , float a jejich deriváty |
number |
True |
true |
False |
false |
None |
null |
Modul json však dává možnosti, jak si poradit i s jinými typy – konkrétně můžete pojmenovanému parametru default předat vlastní serializační funkci nebo dokonce parametru cls poslat celý alternativní serializační objekt (potomka třídy json.JSONEncoder). Pro podrobnosti se podívejte do dokumentace.
Pro pořádek (a přehled) si ještě bez větších komentářů uveďme plnou specifikaci obou základních metod objektu json:
str
, int
, float
, bool
, None
) a nevyhodí výjimku TypeError.
(item_separator, key_separator)
. Například ve výchozím nastavení s povoleným odsazením je to dvojce (',', ': ')
.