Přejít k navigační liště

Zdroják » JavaScript » JSON : jednotný formát pro výměnu dat

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.

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

JSON Lint

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']
JSON Editor

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.

Odkazy

Používáte ve vašich aplikacích JSON?

Komentáře

Subscribe
Upozornit na
guest
3 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
David Grudl

(a doufám že první na celém novém magazínu Zdroják, čímž mu přeji vše nej!!! do startu)

mastodont

Pro spoustu lidí je to sice irelevantní, ale mně se tento formát nelíbí. YAML je čitelnější, přehlednější.

Afareus

Líbí nelíbí… Naučit se musíme všechno :)

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.