Jak analyzovat JSON v Pythonu

Photo of author

By etechblogcz

JSON je oblíbený formát pro výměnu dat, a Python nabízí vestavěný modul json pro jeho zpracování. Tento článek vás provede vším, co potřebujete vědět o práci s JSON v Pythonu.

V tomto tutoriálu se dozvíte:

  • Základní principy JSON.
  • Jak analyzovat a vytvářet JSON řetězce v Pythonu.
  • Jak číst a zapisovat do JSON souborů pomocí Pythonu.

Pojďme na to! 🚀

Co je to JSON?

JSON, neboli JavaScript Object Notation, je textový formát pro přenos dat. Ačkoli byl inspirován objekty v JavaScriptu, téměř všechny programovací jazyky dnes podporují práci s JSON.

Pokud jste někdy pracovali s API nebo konfiguračními soubory, pravděpodobně jste se s JSON setkali.

📑 Při komunikaci s API se data odesílají a přijímají právě ve formátu JSON. Je také běžně využíván v komunikaci mezi klientem a serverem v různých aplikacích. Kromě toho ho lze použít i pro univerzální ukládání dat.

Formát JSON je velmi podobný slovníku v Pythonu. Slovníky jsou efektivní datové struktury, které ukládají data pomocí párů klíč-hodnota.

Než budeme pokračovat, je důležité zmínit následující:

  • V Pythonu je JSON objekt reprezentován jako slovník.
  • Pole v JSON je reprezentováno jako seznam v Pythonu.
  • Booleovské hodnoty v JSON jsou true a false. V Pythonu jsou tyto hodnoty převedeny na logické True a False.

Podrobnější informace o typech dat, které se převádějí mezi JSON a Pythonem, najdete v oficiální dokumentaci zde.

Modul json je součástí standardní knihovny Pythonu, takže jej nemusíte instalovat. Importujete ho jednoduše takto:

import json

Jak načíst JSON řetězec v Pythonu

Základní syntaxe pro načtení JSON řetězce do Pythonu je:

<dict_obj> = json.loads(<json_str>)

Kde:

  • <dict_obj> je slovník v Pythonu, do kterého se načte JSON řetězec.
  • <json_str> je platný JSON řetězec.

Tento příkaz načte JSON řetězec do pythonovského slovníku.

Podívejme se na příklad. Mějme JSON řetězec json_str:

json_str=""'
{
    "books": [
        {
            "title": "The Wind in the Willows",
            "author": "Kenneth Grahame",
            "year": "1908"
        },
        {
            "title": "To the Lighthouse",
            "author": "Virginia Woolf",
            "year": "1927"
        }
    ]
}
'''

Následující kód ukazuje, jak lze načíst tento JSON řetězec do slovníku pomocí metody loads(). Pro ověření, že py_dict je skutečně slovník, použijeme 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 vidět v příkladu, každé pole v JSON řetězci je nyní párem klíč–hodnota ve slovníku py_dict.

Jak vytvořit JSON řetězce v Pythonu

Představme si, že máte slovník v Pythonu. Jak z něj vytvoříte JSON řetězec?

Můžete to udělat pomocí metody dumps() s následující syntaxí:

<json_str> = json.dumps(<dict_obj>)

Kde:

  • <dict_obj> je pythonovský slovník, který chceme převést na JSON řetězec.
  • <json_str> je výsledný JSON řetězec.

Metoda dumps() tak převede slovník do JSON formátu.

Přidejme do našeho existujícího slovníku py_dict nový klíč "movies". Můžeme to udělat takto:

py_dict["movies"] = [{"title":"The Imitation Game","year":"2014",
"lang":"en","watched":True}]

Nyní tento upravený slovník převedeme na nový JSON řetězec 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 vidíte výše, vygenerovaný JSON řetězec je obtížně čitelný bez formátování. Pro lepší čitelnost můžeme použít volitelný parametr indent.

Pokud nastavíme indent na celé číslo (např. 2), výstup bude formátovaný s odsazením, jak ukazuje následující kód:

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
    }
  ]
}

Výstup je nyní formátovaný a mnohem přehlednější.

Poznámka: 💡 Pokud chcete, aby byly klíče seřazeny abecedně, můžete parametr sort_keys nastavit na True.

V následujícím fragmentu kódu vidíme, že klíče jsou seřazeny abecedně.

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"
    }
  ]
}

Klíče se nyní zobrazují v abecedním pořadí: „author“, „title“ a „year“.

Zatím jsme se naučili pracovat s JSON řetězci. V další části se zaměříme na práci se soubory JSON.

Jak číst JSON soubor v Pythonu

Pro čtení JSON souboru v Pythonu použijeme následující syntaxi:

json.load(<json-file>)

# kde <json-file> je libovolný platný JSON soubor.

Všimněte si, že používáme metodu load() a nikoliv loads(). Metoda loads() načítá JSON řetězec, zatímco load() načítá JSON soubor.

Při práci se soubory v Pythonu je dobré používat kontextové manažery. Můžete sice soubory číst i takto:

my_file = open('students.json','r')

contents = my_file.read()

print(contents)

file.close()

Ale pokud soubor nezavřete, může dojít k plýtvání systémovými zdroji.

Kontextové manažery však zajistí, že se soubory po dokončení operací automaticky zavřou.

Pro čtení souborů tedy použijeme kontextový manažer takto:

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'}]}

Při čtení souboru je potřeba definovat režim jako „r“ (read – čtení), jak vidíte ve výše uvedeném kódu.

Poznámka: Aby bylo procházení adresářů snadné, ujistěte se, že se JSON soubor nachází ve stejné složce jako váš skript Python. Pokud máte JSON soubor v jiné složce, musíte zadat celou cestu k souboru.

Nyní umíme číst JSON soubor v Pythonu.
V další části se dozvíme, jak do souboru JSON zapisovat. ✍

Jak zapisovat do JSON souboru v Pythonu

Pro zápis do existujícího JSON souboru nebo vytvoření nového použijeme metodu dump() s následující syntaxí:

json.dump(<dict_obj>,<json_file>)

# kde <dict_obj> je slovník v Pythonu

# a <json_file> je JSON soubor

Tato syntaxe zapíše slovník <dict_obj> do souboru JSON <json_file>.

V předchozí části jsme měli slovník py_dict. Nyní jej uložíme do nového souboru s názvem new_file.json.

Následující kód ukazuje, jak můžeme 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, tak se vytvoří.

Po spuštění tohoto kódu se ve vašem aktuálním pracovním adresáři vytvoří nový JSON soubor. Můžete si ho prohlédnout a zkontrolovat obsah.

Nyní umíme v Pythonu vytvářet JSON soubory.

Při zápisu do souborů je hlavním cílem ukládání dat. Pokud chcete zachovat formátování, můžete použít parametry indent a sort_keys.

Závěr

⏲ Je čas na krátké shrnutí.

V tomto tutoriálu jsme se naučili:

  • Základy práce s JSON.
  • Jak používat metody loads() a load() pro čtení JSON řetězců a souborů.
  • Jak používat metody dumps() a dump() pro zápis pythonovských slovníků do JSON řetězců a souborů.

Doufám, že vám tento návod pomohl. Přeji vám příjemné učení!

Nezapomeňte se podívat i na další JSON nástroje, které slouží k analýze, formátování a validaci JSON dat.