Lekce 2.3

Datové formáty a scraping

Struktura JSON, XML a CSV a k čemu se který hodí, úskalí CSV, co je scraping a čím se liší od práce s API.

JSON

Data v aplikacích jsou obvykle uložená v databázi a ptáme se na ně jazykem SQL. Často je ale potřeba exportovat data, protože je chceme použít v jiné aplikaci. Pro výměnu dat mezi různými aplikacemi obvykle používáme univerzální standardizované formáty. Často se vyznačují tím, že jsou lidsky čitelné, takže jim rozumí nejen aplikace, ale přečte je i člověk, když si je otevře v textovém editoru.

Nejběžnější formáty jsou tři: JSON, XML a CSV. Všechny si ukážeme na stejných datech, na kurzovním lístku směnárny.

Objekty a pole

JSON (JavaScript Object Notation) skládá data z objektů a polí. Takhle vypadá lístek Směnárny U Mostu:

json
{
  "exchange": "Směnárna U Mostu",
  "date": "2026-11-05",
  "open": true,
  "rates": [
    { "code": "EUR", "buy": 23.80, "sell": 24.90, "note": null },
    { "code": "USD", "buy": 21.25, "sell": 22.30, "note": null },
    { "code": "GBP", "buy": 28.40, "sell": 29.85, "note": "jen bankovky" }
  ]
}

Objekt stojí ve složených závorkách a obsahuje dvojice klíč a hodnota, oddělené čárkami. Klíč je text v uvozovkách, za ním dvojtečka a hodnota. Pole stojí v hranatých závorkách a je to seznam hodnot v daném pořadí, tady seznam kurzů.

Objekty a pole se do sebe dají libovolně zanořovat. Lístek je objekt, v něm je pole kurzů a každý kurz je zase objekt. Funguje to jako šanon: na hřbetu je název a datum, uvnitř jsou desky s kurzy a v deskách list pro každou měnu. Kdo ví, jak je šanon uspořádaný, najde nákupní kurz libry, aniž by četl všechno ostatní.

Typy hodnot

Hodnota v JSON může být:

  • text ve dvojitých uvozovkách, "Směnárna U Mostu",
  • číslo bez uvozovek a s desetinnou tečkou, 23.80,
  • logická hodnota true nebo false,
  • null jako prázdná hodnota, kterou známe z SQL,
  • další objekt nebo pole.

Rozdíl mezi 23.80 a "23.80" není kosmetický. První je číslo, se kterým program rovnou počítá, druhé je text, který vypadá jako číslo. Datum JSON jako typ nemá, proto ho zapisujeme jako text ve tvaru RRRR-MM-DD, stejně jako v SQLite.

Přísný formát

Pokud znáte JavaScript, je vám zápis ve formátu JSON povědomý na první pohled, ale pozor! JSON má přísná pravidla, která když porušíte, tak jsou data neplatná.

Chybně:

json
{
  'code': 'EUR',
  "buy": 23.80,   // nákupní kurz
  "sell": 24.90,
}

Správně:

json
{
  "code": "EUR",
  "buy": 23.80,
  "sell": 24.90
}
  • JSON dovoluje jen dvojité uvozovky, a musí v nich být všechny textové hodnoty a názva vlastností
  • komentáře nelze použít vůbec
  • za posledním prvkem objektu ani pole nesmí být čárka (v JavaScriptu a jiných programovacích jazycích se naopak často doporučuje)

Program, který JSON čte, odmítne kvůli jediné chybě celý soubor a řekne, kde se zarazil. Kdyby v kurzu zbyla jen čárka za posledním prvkem, JavaScript v prohlížeči Chrome napíše:

Expected double-quoted property name in JSON at position 52 (line 5 column 1)

Hláška si stěžuje na chybějící klíč na pátém řádku, a ne na čárku na čtvrtém. Po čárce totiž program čeká další dvojici klíč a hodnota a místo ní najde zavírací závorku. U chybových hlášek se proto vyplatí podívat se i o kousek před místo, které ukazují.

K čemu se JSON používá

JSON vznikl (zcela jasně) pro JavaScriptové alikace, ale dnes s ním umí každý programovací jazyk. Potkáme ho hlavně:

  • v odpovědích webových API, přes která si aplikace posílají data (podrobně v další lekci),
  • v konfiguračních souborech, třeba v nastavení editoru VS Code nebo v package.json webových projektů,
  • při výměně dat mezi aplikacemi,
  • v dokumentových databázích jako MongoDB.
Tip

Otevřete si v prohlížeči adresu https://open.er-api.com/v6/latest/CZK. Je to veřejná služba s kurzy světových měn vůči koruně a odpovídá v JSON.

Firefox odpověď ukáže jako strom, ve kterém jde objekty rozbalovat a sbalovat. Chrome a Edge ji podle verze ukážou buď rovnou zformátovanou, nebo mají nahoře zaškrtávací políčko pro čitelné formátování (anglicky Pretty-print). Bez formátování je celá odpověď na jednom řádku: programu mezery a odřádkování nechybí, lidem ano.

Případně si můžete do prohlížeče nainstalovat doplněk JSON Formatter, který vám data i obarví podle typu.