Formát JSON: příklad a popis

20. 2. 2019

JSON je zkratka pro Java skript Object Notation, což je formát, který používá text čitelný pro člověka přenos dat sestávající z párů atribut-hodnota. Jedná se o nejběžnější datový formát používaný pro asynchronní komunikaci mezi prohlížečem a serverem, převážně nahrazující XML (pomocí AJAXu).

json formátu

JSON je datový formát nezávislý na jazyku, který byl odvozen z jazyka JavaScript. Od roku 2017 mnoho programovacích jazyků použilo kód pro generování a analýzu dat v sobě. Názvy souborů JSON používají příponu .json.

Dějiny stvoření

Původní formát JSON vyvinul Douglas Crockford na začátku nuly a následně v roce 2013 definovaly dva konkurenční standardy (RFC 7159 a ECMA-404). Standard ECMA popisuje pouze platnou syntaxi, zatímco RFC pokrývá některé ze základů zabezpečení a interoperability.

Navíc existuje standard RFC 7493, který definuje omezený profil známý jako I-JSON (zkratka pro "Internet JSON"). Snaží se překonat některé problémy s interakcí. Každý takový dokument je platným dokumentem JSON.

Potřeba vytvářet tento formát vyrostla z potřeby skutečného protokolu komunikace mezi serverem a prohlížečem, implementovaného v reálném čase bez použití plug-inů (například Flash nebo Java appletů).

json než otevřít

Vývoj a aplikace

Jak již bylo řečeno, Douglas Crockford, který byl tvůrcem společnosti StateSoftware, poprvé identifikoval a popularizoval formát JSON. Následně se spoluzakladatelé dohodli, že vytvoří systém využívající standardní možnosti prohlížeče a poskytli vrstvu abstrakcí pro vývojáře k vytváření aplikací s nepřetržitým duplexním připojením k web serveru. Současně bylo možné zachovat dvě HTTP připojení otevřené a zpracovat je až na standardní dobu prohlížeče, pokud nebyla vyměněna žádná data. Spoluzakladatelé uspořádali diskusi u kulatého stolu a hlasovali pro pojmenování datového formátu JSML nebo JSON a také určili typ licence, podle které bude nový vývoj k dispozici. V současné době je formát open source.

json online

Praktické využití

Webová stránka JSON.org byla zahájena v roce 2002. V prosinci 2005 společnost Yahoo! začal nabízet některé své webové služby v tomto formátu. Společnost Google začala používat kanály JSON pro svůj webový protokol GData až v prosinci 2006.

Původně formát souboru JSON byl určen pro podmnožinu skriptovacího jazyka jazyka JavaScript (zejména Standard ECMA-262 3. vydání - prosinec) a byl s ním běžně používán. Jedná se však o formát dat nezávislý na datovém jazyce. Kód pro analýzu a generování dat JSON je k dispozici v mnoha programovacích jazycích. Na webové stránce JSON jsou uvedeny všechny knihovny.

Přestože byl formát JSON online původně inzerován a považován za přísnou podmnožinu jazyka JavaScript a ECMAScriptu, pravidelně povoluje některé znaky, které neprocházejí v řetězcích, které nejsou platné v řetězcích JavaScript a ECMAScript.

Samotná JSON se stala mezinárodním standardem ECMA v roce 2013 jako standard ECMA-404, který byl používán v RFC 7158 ve stejném roce jako referenční. V roce 2014 se RFC 7159 stala hlavním odkazem na používání JSONu na internetu (například aplikace MIME / json).

Typy dat syntaxe a příkladu

Hlavní typy dat JSON jsou:

  • Číslo: Znamená desetinné číslo, které může obsahovat zlomkovou část a může použít exponenciální notaci E, ale nemůže zahrnovat ne-čísla (například NaN). Formát nerozlišuje mezi celočíselnými čísly a čísly s pohyblivou čárkou. JavaScript používá pro všechny číselné hodnoty formát s dvojitou přesností s plovoucí částí, ale jiné jazyky, které implementují JSON, je mohou kódovat jiným způsobem.

Příklad formátu json

  • Řetězec: řetězec nulových nebo velkých jednookých znaků. Řetězce jsou odděleny dvojitými uvozovkami a podpůrnou syntaxí s zpětným lomítkem.
  • Literálie: jakákoli hodnota je pravdivá nebo nepravdivá.
  • Array: Uspořádaný seznam nula nebo více hodnot, z nichž každý může být libovolného typu. Políčka používají hranaté závorky s čárkami.
  • Objekt: Neřízená sada dvojic name / value, kde jsou názvy (také nazývaná klávesy) řetězce. Vzhledem k tomu, že objekty jsou určeny k reprezentaci asociativních polí, doporučuje (i když to není nutné), aby každý klíč byl uvnitř jedinečný. Objekty jsou odděleny kudrnatými příchytkami a čárkami se oddělují čárky, zatímco uvnitř každého z nich znak dvojtečky odděluje klíč nebo název od jeho hodnoty.
  • Null: Nulová hodnota pomocí slova null.

Omezené mezery jsou povoleny a mohou být umístěny kolem nebo mezi prvky syntaxe (hodnoty a interpunkce, ale ne v rámci hodnoty řetězce). Za tímto účelem jsou brány v úvahu pouze čtyři speciální znaky. prostory: prostor, horizontální zarážka, podávání čáry a lomítko. Konkrétně by značka bytu by neměla být generována odpovídající implementací (i když to může být přijato při analýze JSON). Žádost ve formátu JSON neposkytuje syntaxi pro komentáře.

Starší verze (například ty, které jsou specifikovány v dokumentu RFC 4627) vyžadovaly, aby platný dokument sestával pouze z objektu nebo typu pole, který by mohl obsahovat jiné typy v něm. Takový formát JSON, jehož příklad lze nalézt na zastaralých webových stránkách, se momentálně nepoužívá.

upload ve formátu json

Problémy s přenositelností dat

Ačkoli Douglas Crockford původně tvrdil, že JSON je přísná podmnožina jazyka JavaScript, jeho specifikace umožňuje skutečně vytvářet dokumenty, které nejsou v jazyce JavaScript čitelné. Zejména JSON umožňuje, aby řetězcové znaky Unicode U + 2028 LINE SEPARATOR a U + 2029 PARAGRAPH SEPARATOR se na uvedených řádcích objevily nestíněně, ale JavaScript není. To je způsobeno skutečností, že JSON zakazuje pouze "řídící znaky". Pro maximální kompatibilitu je třeba tyto znaky uniknout zpětným lomítkem. Tato jemnost je důležitá při vytváření JSONP.

Formát JSON: jak otevřít?

Dokumenty JSON mohou být zakódovány v UTF-8, UTF-16 nebo UTF-32, výchozí kódování je UTF-8. Tyto standardy podporují úplnou sadu znaků Unicode včetně znaků mimo hlavní vícejazyčnou rovinu (od U ​​+ 10 000 do U + 10FFFF). Pokud však uniknou, musí být tyto znaky zapsány pomocí náhradních párů UTF-16 - chybí některé podrobnosti u některých analyzátorů ve formátu JSON. Jak otevřít a jak bude tento soubor číst?

Čísla v tomto formátu jsou agnostické vzhledem k jejich reprezentaci v programovacích jazycích. Neexistuje žádný rozdíl mezi celočíselným a pohyblivým bodem: některé implementace mohou považovat 42, 42.0 a 4.2E + 1 za stejné číslo, zatímco jiné nemusí. Kromě toho neexistují žádné požadavky na problémy, jako je přetečení, nedostatečnost, ztráta přesnosti nebo zaokrouhlování. Navíc formát JSON neříká nic o zpracování nuly podepsané, a to bez ohledu na to, zda je 0.0 odlišné od -0.0. Většina implementací, které používají standard s pohyblivou řádovou čárkou IEEE 754 včetně javascriptu, si uchovávají nuly, ale ne všechny implementace JSONu to mohou udělat.

požadavek ve formátu json

Použijte javascript

Vzhledem k tomu, že formát JSON byl odvozen z jazyka JavaScript a jeho syntaxe je (většinou) podmnožinou jazyka, můžete pomocí funkce JavaScripteval analyzovat data JSON. Vzhledem k problému s analýzou terminátorů řetězce Unicode popsanými v předchozí části musí funkce eval provádět jejich výměnu.

To není nebezpečné, pokud řetězec není správně ověřen. Místo toho můžete číst a zapisovat JSON pomocí knihovny analyzátorů JSON nebo podpory JavaScriptu.

Správně implementovaný analyzátor přijímá pouze platný formát JSON, jehož popis je přítomen v systému, což zabraňuje neúmyslnému provedení potenciálně škodlivého kódu.

Od roku 2010 umožňují webové prohlížeče, jako například Firefox a Internet Explorer, podporovat analýzu a nahrát do formátu JSON.

Nepodporované nativní typy dat

Syntaxe JavaScript definuje několik nativních datových typů, které nejsou zahrnuty v standardu JSON: Map, Set, Date, Error, Regular Expression, Function a některé další. Typy datových typů jazyka JavaScript musí být zastoupeny jinými formáty, přičemž oba programy souhlasí s typem konverze mezi typy. Dnes existují některé standardy defacto, například konverze data na řetězec, ale žádný z nich není obecně přijat. Jiné jazyky mohou mít jinou sadu nativních typů, které musí být serializovány opatrně, aby se vypořádali s tímto typem konverze.

popis formátu json

Schéma JSON

Schéma slouží k definování datové struktury JSON pro validaci, dokumentaci a správu interakcí. Poskytuje určitý druh smlouvy týkající se dat požadovaných aplikací a způsob, jak je změnit.

Schéma je založeno na konceptech z XML schématu (XSD), ale je nativní. Stejně jako v XSD se pro schéma i data používají stejné nástroje pro serializaci / deserializaci.

Schéma je online projekt, který je aktuálně ve verzi 5 (vydaný 13. října 2016). K dispozici je několik validátorů pro různé programovací jazyky, z nichž každá má jinou úroveň souladu. Neexistuje standardní přípona souboru, ale někteří odborníci navrhují schválení .schema.json.

Typ MIME

Oficiální typ MIME pro text JSON je "application / json". Navzdory skutečnosti, že většina moderních implementací přijala oficiální typ MIME, mnoho aplikací nadále poskytuje starší podporu pro jiné typy MIME. Mnoho poskytovatelů služeb, prohlížečů, serverů, webových aplikací, knihoven, rámců a rozhraní API používá, očekává nebo rozpozná typ MIME, jehož obsah vypadá jako "text / json" nebo "text / javascript". Mezi významné příklady patří rozhraní Google Search API, Yahoo !, Flickr, Facebook API, DojoToolkit 0.4 atd.

JSON-RPC

JSON-RPC je protokol vzdáleného volání procedur (RPC) založený na protokolu JSON, vytvořený jako náhrada za XML-RPC nebo SOAP. Jedná se o jednoduchý protokol, který definuje pouze několik typů dat a příkazů. Umožňuje systému odesílat oznámení (informace na server, který nevyžaduje odpověď) a několik volání na server, které lze odpovědět mimo pořadí.

AJAJ

Asynchronní JavaScript a JSON (nebo AJAJ) patří do stejné dynamické webové stránky metodologie jako Ajax, ale místo XML, JSON data je hlavní formát. AJAJ je technologie pro vývoj webových aplikací, která umožňuje webové stránce požádat o nové údaje po načtení do prohlížeče. Obvykle je zobrazuje ze serveru v reakci na akce uživatele na této stránce. Například to, co uživatel zadává do vyhledávacího pole, klientský kód pošle na server, který okamžitě reaguje rozbalovacím seznamem příslušných databázových položek.

Bezpečnostní problémy

Text JSON je definován jako objekt serializace dat. Jeho návrh, ale jako volně definovaná podmnožina skriptovacího jazyka JavaScript, představuje několik bezpečnostních problémů. Zaměřují se na použití jazyka JavaScriptu k dynamickému provádění textu JSON jako vloženého jazyka JavaScript. To odhaluje program chybným nebo škodlivým skriptům. Při práci s daty načtenými z Internetu je to vážný problém.

Tato jednoduchá a populární, ale riziková metoda využívá kompatibilitu s funkcí JavaScripteval.

Někteří vývojáři se mylně domnívají, že text JSON je také syntakticky podobný kódu JavaScript, i když je to jen částečně pravdivé. Proto se předpokládá, že jednoduchý způsob, jak program JavaScript analyzovat data v tomto formátu, je použít vestavěnou funkci JavaScripteval, která byla navržena pro vyhodnocení výrazů "Javascript". Namísto použití konkrétního syntaktického analyzátoru se tlumočník sám používá k provádění dat JSON, vytváření přirozených objektů jazyka JavaScript. Tato metoda je však riskantní, pokud je pravděpodobné, že data JSON mohou obsahovat libovolný kód Javascript, který pak bude proveden stejným způsobem. Pokud nejsou nejprve přijata opatření k ověření dat, metoda eval je ohrožena zranitelnostmi zabezpečení, pokud data a celé prostředí jazyka JavaScript nejsou pod kontrolou jediného důvěryhodného zdroje.

Pokud například data nejsou ověřena, podléhají nebezpečným útokům kódu JavaScript. Taková porušení mohou také vytvářet riziko krádeže dat, podvodů s ověřováním pravosti a dalšího možného zneužití dat a zdrojů.

Takže nová funkce JSON.parse byla vyvinuta jako bezpečnější alternativa k evalu. Je speciálně navržen tak, aby zpracovával data přesně na JSON a nikoli na JavaScript. Původně byla naplánována pro zařazení do čtvrtého vydání standardu ECMAScript, ale nestalo se tak. Nejprve byl přidán do verze 5 a je nyní podporován hlavními prohlížeči.