JSON : jednotný formát pro výměnu dat

JSON (JavaScript Object Notation) se v posledních letech stal jedním z nejpoužívanějších formátů pro výměnu dat na Webu. V článku vysvětlíme, proč je tento formát tolik populární, předvedeme si základní pravidla zápisu dat pomocí JSON a představíme užitečné nástroje pro práci s ním.
Seriál: JSON pro výměnu dat na webu (3 díly)
- JSON : jednotný formát pro výměnu dat 29. 9. 2008
- Načítáme a zpracováváme JSON 3. 10. 2008
- Nativní podpora JSON v prohlížečích 9. 10. 2008
Nálepky:
JSON [džej-son], JavaScript Object Notation neboli JavaScriptový zápis objektů, je formát pro výměnu dat, který se během posledních několika let zařadil mezi nejdůležitější formáty na Webu. Navrhl jej Douglas Crockford a jeho specifikaci najdete v RFC 4627.
V čem tkví úspěch JSON?
JSON se objevil ve chvíli, kdy se na webu pro výměnu dat používal převážně formát XML. Ten v očích javascriptových vývojářů trpěl některými nedostatky, např. práce s ním byla složitá (bylo nutné používat „neohrabaný“ DOM, řešit přítomnost uzlů obsahujících pouze bílé znaky apod.).
A tak ačkoliv při zápisu celých dokumentů JSON nemůže (a ani nemá) formátu XML konkurovat, v zápisu krátkých strukturovaných dat vyměňovaných webovými aplikacemi konkurenční boj vyhrál JSON.
Zápis JSON je platným zápisem jazyka JavaScript. To je jedna z jeho výhod; již ze samotného pohledu na zápis v JSON rovnou vidíme, jak s ním budeme v programu pracovat:
[
{"name": "Cerna sanitka", "tvname": "CT1"},
{"name": "Comeback", "tvname": "Nova"},
{"name": "Pratele", "tvname": "Prima"}
]
Pokud by výše uvedená data nebyla v JSON, ale v čistém textu, navrhli bychom si datovou strukturu, do které bychom je načetli (byla by pravděpodobně stejná nebo velmi podobná našemu zápisu v JSON). Pokud by data byla v XML, postupovali bychom stejně nebo bychom je zpracovali skrze rozhraní DOM. Oba způsoby jsou možné, ale přesně o jeden krok komplikovanější, než je nezbytně nutné.
Zápis v JSON je zápisem v JavaScriptu, je tedy sám o sobě již připravenou datovou strukturou ke zpracování. Můžeme říct, že JSON je serializovanou podobou datových typů JavaScriptu. Přesněji některých jeho datových typů, viz dále.
Formát JSON
Do JSON můžeme uložit následující typy dat:
- JSONString – textový řetězec
- JSONNumber – číslo (celočíselné nebo reálné, včetně zápisu s exponentem)
- JSONBoolean – logická hodnota
- JSONNull – hodnota null
- JSONArray – pole
- JSONObject- objekt
Ostatní datové typy nemůžeme vkládat přímo, např. datum pro vložení do JSON převedeme na JSONString.
JSONString
Příklad použití: "Hezky česky"
Řetězec musí být vložen do uvozovek (apostrofy nejsou povoleny) a může obsahovat všechny znaky Unicode. Uvozovky a zpětné lomítko je nutné vložit ve tvaru "
a \
.
Pokud bychom měli s češtinou problémy, můžeme znaky s diakritikou stejně jako v JavaScriptu vložit ve tvaru uXXXX, kde XXXX značí kód znaku z tabulky Unicode zapsaný v šestnáctkové soustavě. V našem případě by výsledek vypadal: "Hezky u010desky"
.
JSONNumber
Příklady:
12
-13.5
0.7e-4
Na zápisu čísla není nic neobvyklého, snad jen, že vedoucí nulu před desetinnou čárkou nelze vynechat. Zápis .5
je tedy neplatný.
JSONBoolean
Příklady:
true
false
JSONNull
Příklad: null
JSONArray
Příklady:
[0, "Shakespeare", false]
[[1, 2], null, "apple"]
Pole v JSON je kontejner obsahující seřazený výpis hodnot. Ohraničují jej hranaté závorky. Hodnotami pole může být kterýkoliv datový typ JSON včetně objektu nebo pole; můžeme tak pole do sebe snadno vnořovat.
JSONObject
Příklady:
{"x": 45, "y": 78}
{"person": {"name": "Robin", "age": 35}, "met": false, "hobbies": null, "data": [1,2]}
Objekt v JSON není plnohodnotný objekt, jaký známe z JavaScriptu. Jedná se o kontejner, který obsahuje pouze data, žádné metody (měli bychom ho tedy správně nazývat hash nebo asociativní pole). Každá datová položka objektu má svůj klíč, který je typu JSONString.
Do objektu můžeme vkládat další objekty; lze tak snadno vytvářet složitější struktury. Rozsáhlost struktur a hloubka vnoření není specifikací omezena, může být ovšem omezena konkrétní implementací JavaScriptu a JSON parseru.
Tím jsme si předvedli stavební kameny JSON. Nyní můžete začít s tvorbou datových formátů.
Nástroje JSONLint a JSON Editor
Při práci s JSON vám přijdou vhod některé nástroje.
Tím prvním je JSONLint na adrese jsonlint.com, který váš JSON zápis zvaliduje a pomůže vám opravit chyby v syntaxi. Zároveň také všechna data jednotně odsadí (není nutné, ale zvyšuje to čitelnost).
Dalším nástrojem je JSON Editor. V něm si můžete vyzkoušet práci se složitějšími strukturami. Zobrazí vám nejen jejich stromovou podobu, ale umožní v ní i vyhledávat a upravovat jednotlivé uzly. U složitých struktur oceníte možnost vygenerování kódu pro přístup k uzlu. Stačí vybrat požadovaný uzel a editor zobrazí kód pro přístup k němu, např.:
json['members'][0]['entity']['updated']
Použití
Přestože je JSON odvozen z JavaScriptu, je jazykově nezávislý. Najdeme tak implementaci JSON v PHP (od verze 5.2 nativně), Ruby nebo Pythonu, a dokonce některé desktopové aplikace používají JSON jako souborový formát (např. prohlížeč Google Chrome).
Na Webu se JSON používá pro výměnu dat pomocí AJAXu. Konkuruje mu zde asi jen XML. Navíc řada služeb používá JSON pro výměnu dat skrze své API. Jako příklad můžeme uvést jednoduché služby JSON-time, JSON-head, JSON-tinyurl.
Pokračování příště
Vysvětlili jsme si, jak se zapisují data pomocí JSON, ale ještě jsme se nenaučili s ním pracovat. Nejsnazší cestou k jejich zpracování by bylo použít metodu eval, která vyhodnotí svůj argument jako kód jazyka JavaScript. Příště si ukážeme, proč bychom se měli této metodě raději vyhnout a jaké jsou další cesty pro práci s JSON.
(a doufám že první na celém novém magazínu Zdroják, čímž mu přeji vše nej!!! do startu)
Pro spoustu lidí je to sice irelevantní, ale mně se tento formát nelíbí. YAML je čitelnější, přehlednější.
Líbí nelíbí… Naučit se musíme všechno :)