Jak analyzovat JSON v Pythonu

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!⏳

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 do slovníku Pythonu .

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 řetězce JSON .

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 do souboru JSON .

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í.