(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ě …