(zdroj: http://www.postgresql.org/docs/9.4/static/datatype-json.html)
Proč json ?
Data v json notaci je mozne uchovavat dvojim způsobem jako text a jako JSON. Uchování dat ve tvaru json má tu výhodu, že umožňuje uchovávat data v json validovaném formátu, na rozdíl od textu, kde se neprovádí kontrola dat.
Dva typy JSON formátu
Jsou json a jsonb . Ačkoliv mají vstup ten samý, liší se efektivitou. json datové typy uchovávají exaktní kopií vstupního textu, který musí být vždy reparsovaný při jejich vykonávaní. Pokud jsonb data jsou uchovány v dekompozitním bionárním formátutakže jsou pomalejší na vstupu, ale rýchlejší tam, kde je nutné provádět reparsovaní. jsonb taky podporuje indexování, které může mít významnou výhodu.
Co jsonb nedělá :
– neochraňuje white space (znaky jako je mezera, konec řádku, tab …)
- nedrží duplicitní objektové klíče
- nedrží pořadí ukládaní objektových klíčů
- nepodporuje ukládaní v tavru \uXXXX, ale ukládá znaky v ASCII nebo UTF8 znakovém tvaru (je to proto, že data jsou pak rychlej zpracována)
Vstupní syntax JSON a JSONB
-- Primitvní hodnota (number, quoted string, true, false, null) select '5'::json; -- Array pro 0 nebo více lementů (elements need not be of same type) SELECT '[1, 2, "foo", null]'::json; -- Objektové klíče musí být vždy v úvozovkách SELECT '{"bar": "baz", "balance": 7.77, "active": false}'::json; -- Pole a objekty mohou mít vložené prvky libovolně SELECT '{"foo": [true, "bar"], "tags": {"a": 1, "b": null}}'::json; Výstupní tvar pro JSON a JSONB SELECT '{"bar": "baz", "balance": 7.77, "active":false}'::json; json ------------------------------------------------- {"bar": "baz", "balance": 7.77, "active":false} (1 row) SELECT '{"bar": "baz", "balance": 7.77, "active":false}'::jsonb; jsonb -------------------------------------------------- {"bar": "baz", "active": false, "balance": 7.77} (1 row) SELECT '{"reading": 1.230e-5}'::json, '{"reading": 1.230e-5}'::jsonb; json | jsonb -----------------------+------------------------- {"reading": 1.230e-5} | {"reading": 0.00001230} (1 row)
pokračování příště …