Formát JSON: příklad a popis. Formát JSON: vytváření dat, použití s ​​PHP a dekódováním zkratek JS Json

) a mezi servery samotnými (softwarová rozhraní HTTP). Formát JSON je také vhodný pro ukládání složitých dynamických struktur v relačních databázích nebo mezipaměti souborů.

Protože JSON je podmnožinou syntaxe JavaScriptu, lze jej rychle deserializovat pomocí vestavěné funkce eval(). Navíc je možné vkládat plně funkční funkce JavaScriptu. V PHP je počínaje verzí 5.2.0 podpora JSON obsažena v jádru v podobě funkcí json_decode() a json_encode(), které samy převádějí datové typy JSON na odpovídající typy PHP a naopak.

Syntax

JSON je postaven na dvou strukturách:

  • Sada párů klíč/hodnota. V různých jazycích je to implementováno jako objekt, záznam , struktura , slovník , hashovací tabulka , klíčovaný seznam nebo asociativní pole . Klíčem může být pouze řetězec, hodnota může být pouze v libovolném tvaru.
  • Číslovaný soubor hodnot. V mnoha jazycích je to implementováno jako pole, vektor, seznam nebo sekvence.

Jedná se o univerzální datové struktury. Teoreticky je všechny moderní programovací jazyky podporují v té či oné podobě. Protože se JSON používá k výměně dat mezi různými programovacími jazyky, má smysl jej na těchto strukturách stavět.

V JSON se používají následující formuláře:

  • Objekt je neuspořádaná množina párů název/hodnota uzavřená ve složených závorkách ( ). Mezi jménem a hodnotou je symbol ": " a dvojice název/hodnota jsou odděleny čárkami.
  • Pole (jednorozměrné) je sada hodnot, které mají sériová čísla (indexy). Pole je uzavřeno v hranatých závorkách. Hodnoty jsou odděleny čárkami.
  • Hodnota může být čára ve dvojitých uvozovkách, číslo, hodnota skutečný nebo Nepravdivé, objekt, pole nebo hodnotu nula. Tyto struktury mohou být vnořeny do sebe.
  • Řetězec je uspořádaná sada nula nebo více znaků Unicode, uzavřená do dvojitých uvozovek, používající sekvence escape zpětného lomítka. Znaky jsou reprezentovány jako jednoduchý řetězec.
  • Název je řetězec.

Čára velmi podobný řetězci v jazycích a Javě. Číslo také velmi podobné číslu C nebo Java, až na to, že se používá pouze desítkový formát. Mezi libovolné dva znaky lze vložit mezery.

Následující příklad ukazuje JSON reprezentaci objektu popisujícího osobu. Objekt má tětiva pole jména a příjmení, objekt popisující adresu a pole obsahující seznam telefonních čísel.

( "firstName" : "Ivan" , "lastName" : "Ivanov" , "address" : ( "streetAddress" : "Moskovskoe sh., 101, apt. 101" , "city" : "Leningrad" , "postalCode" : 101101 ), "phoneNumbers" : [ "812 123-1234" , "916 123-4567" ])

V XML by taková struktura vypadala asi takto:

Ivan Ivanov Moskovskoe sh., 101, apt. 101 Leningrad 101101 812 123-1234 916 123-4567

812 123-1234 916 123-4567

Srovnání s YAML

Funkčně i syntakticky je JSON podmnožinou jazyka YAML. Specifikace YAML 1.2 konkrétně uvádí, že „jakýkoli soubor JSON je platným souborem YAML“. Nejběžnější analyzátor YAML dokáže zpracovat i JSON. Specifikace YAML před verzí 1.2 plně nepokrývala JSON, především kvůli chybějící nativní podpoře UTF-32 v YAML a také požadavku na mezeru za oddělovačem čárky. Specifikace JSON navíc obsahovala komentáře stylu /* */.

Nejdůležitější rozdíl v YAML je sada rozšíření syntaxe, která nemají v JSON analogy:

Relační: YAML podporuje relační data: v dokumentu YAML můžete odkazovat na kotvu, která se v souboru/streamu vyskytla dříve. Tímto způsobem lze vyjádřit rekurzivní struktury. Rozšiřitelnost: YAML podporuje rozšiřitelné datové typy nad rámec primitiv (tj. řetězce, čísla, booleany). Bloky: V YAML je k dispozici syntaxe odsazených bloků; umožňuje popsat strukturovaná data bez použití zbytečných symbolů (všechny druhy závorek, uvozovek atd.).

Schéma JSON

JSON Schema je jedním z jazyků pro popis struktury dokumentu JSON. Používá syntaxi JSON. Na základě konceptů XML Schema, RelaxNG, Kwalify. JSON Schema je samopopisný jazyk: při použití lze ke zpracování dat a popisu jejich platnosti použít stejné nástroje pro serializaci/deserializaci.

Použití JSON v Ajaxu

Následující příklad kódu Javascript ukazuje, jak může prohlížeč použít XMLHttpRequest k vyžádání objektu ve formátu JSON ze serveru (serverová strana programu je vynechána; musí obsahovat kód, který odesílá data jako řetězec JSON v reakci na požadavky url).

Var the_object; var http_request = new XMLHttpRequest() ; http_request.open("GET", url, true); http_request.send(null); http_request.onreadystatechange = function () ( if ( http_request.readyState == 4 ) ( if ( http_request.status == 200 ) ( the_object = JSON.parse ( http_request.responseText ) ; ) else ( alert( "Došlo k problému s adresu URL." ) ; ) http_request = null; ) );

Upozorňujeme, že tento příklad použití XMLHttpRequest není univerzální pro všechny prohlížeče (pro prohlížeče založené na Internet Explorer, Opera, Safari a Mozilla by měly existovat určité rozdíly v kódu). Použití XMLHttpRequest je omezeno kvůli stejné politice původu: URL odpovědi na požadavek musí být ve stejné doméně DNS jako server, na kterém se nachází stránka požadující odpověď. Alternativou je přístup JSONP, který zahrnuje použití kódovaného volání funkce předávaného mezi klientem a serverem, takže klient může načíst data kódovaná JSON z domén třetích stran a upozornit volajícího na dokončení, i když to přináší určitá bezpečnostní rizika a další požadavky na server.

Alternativně může kód stránky používat prvky k asynchronnímu vyžádání dat JSON nebo jednoduše . Tyto přístupy byly běžné před širokou podporou XMLHttpRequest.

Stejnou zásadu původu můžete také použít k přenosu dat JSON pomocí dynamických značek, ale výsledkem je zranitelný kód. Jako bezpečnější alternativa bylo navrženo použití JSONRequest.

Bezpečnostní otázka

Přestože je JSON navržen pro přenos dat v serializované podobě, jeho syntaxe se řídí syntaxí JavaScriptu, což vytváří řadu bezpečnostních problémů. Ke zpracování dat přijatých z externího zdroje ve formátu JSON se na ně často použije funkce eval() bez předběžného ověření.

JavaScript eval()

Protože se JSON jeví jako syntakticky správný kus kódu JavaScript, nejjednodušším způsobem, jak analyzovat data JSON v programu JavaScript, je použít vestavěnou funkci JavaScript eval(), která je navržena ke spouštění výrazů JavaScript. S tímto přístupem není potřeba používat další analyzátory.

Technika eval() činí systém zranitelným, pokud zdroj použitých dat JSON není důvěryhodný ( Angličtina). Taková data mohou být škodlivým kódem JavaScript pro útoky Code Injection ( Angličtina). Pomocí této chyby zabezpečení je možné ukrást data a zfalšovat autentizaci. Tuto chybu zabezpečení však lze eliminovat použitím dalších nástrojů pro ověřování dat. Například před provedením eval() lze data přijatá z externího zdroje ověřit pomocí regulárních výrazů. RFC, které definuje JSON, navrhuje použít následující kód ke kontrole, zda odpovídá formátu JSON

Var my_JSON_object = ! (/[^,:()\[\]0-9.\-+Eaeflnr-u \n\r\t]/ .test ( text.replace (/"(\\.|[^"\\] )*"/g , "" ) ) ) && eval("(" + text + ")" );

Jako bezpečnější alternativa k eval() byla navržena nová funkce parseJSON(), která dokáže zpracovávat pouze data JSON. Byl představen ve verzi 4 standardu ECMAScript a je popsán v článku „JSON: Low-Fat Alternative to XML“. V současnosti je k dispozici jako JavaScriptová knihovna a bude zahrnuta v pátém vydání ECMAScriptu.

Vložený JSON

Nejnovější verze webových prohlížečů mají vestavěnou podporu JSON a jsou schopny ji zpracovat bez volání funkce eval(), což vede k popsanému problému. Zpracování JSON je v tomto případě obvykle rychlejší. Takže v červnu 2009 měly následující prohlížeče vestavěnou podporu JSON:

Nejméně pět populárních knihoven JavaScriptu používá inline JSON, pokud je k dispozici:

Padělání požadavku napříč doménami

Špatné používání JSON činí weby zranitelnými vůči padělání požadavků mezi weby (CSRF nebo XSRF). Protože značka umožňuje použití zdroje, který nepatří do stejné domény jako zdroj, který ji používá, umožňuje spouštění kódu pod rouškou dat JSON v kontextu libovolné stránky, což umožňuje kompromitovat hesla nebo další citlivé informace uživatelů oprávněných k jinému webu.

Zdá se, že se jedná o problém pouze v případě, že data JSON obsahují citlivé informace, které by mohly být kompromitovány třetí stranou, a pokud server spoléhá na zásady jednoho původu ( Angličtina), blokování přístupu k datům, když je detekován externí požadavek. To není problém, pokud server určí platnost požadavku a poskytne data pouze v případě, že jsou správné. K určení toho nelze použít soubory cookie HTTP. Výhradní použití souborů cookie HTTP se používá při padělání požadavků mezi stránkami.

JSONP a JSONPP

JSONP (JSON Padding) nebo "JSON with padding" je rozšíření JSON, když je jako vstupní argument zadán název funkce zpětného volání.

Technologie je založena na skutečnosti, že bezpečnostní politika prohlížeče umožňuje použití tagu pro přístup k jiným serverům, než je server, ze kterého byla stránka načtena.

Bez použití technologie JSONP (to znamená pouze s použitím kódování dat JSON) může server vracet pouze data. Například takto:

("papír": "A4", "počet": 5)

Jedná se však pouze o data a nemohou ovlivnit prohlížeč.

Pomocí techniky JSONP je název funkce zpětného volání předán serveru třetí strany na lince volání (GET):

Zde parametr jsonp obsahuje název funkce zpětného volání parseResponse.

Nyní může zahraniční server example.com vrátit následující kód:

ParseResponse(( "papír" : "A4" , "počet" : 5))

Kód nyní volá funkci javascriptu první domény.

Tato myšlenka byla původně navržena na blogu MacPython v roce 2005 a v současné době ji využívá mnoho aplikací Web 2.0, jako jsou aplikace Dojo Toolkit, Google Toolkit Applications a zanox Web Services. Další rozšíření tohoto protokolu byla navržena tak, aby zahrnovala další argumenty, jako je podpora JSONPP pro webové služby S3DB.

Protože JSONP používá značky skriptů, volání jsou v podstatě otevřená světu. Z tohoto důvodu může být JSONP nevhodný pro ukládání citlivých dat.

Povolení značek skriptu ze vzdálených webů jim umožňuje přenášet jakýkoli obsah na webu. Pokud má vzdálený web chyby zabezpečení, které umožňují vkládání JavaScriptu, může jimi být ovlivněn i původní web.

JSONPP (parametrizovaný JSON s odsazením) Parametrizovaný JSON s odsazením - vývoj myšlenky JSONP

JSONPP obsahuje zdrojovou adresu URL, název funkce, která zpracuje data JSON, řádek pro vyhodnocení po přijetí dat a řádek pro vyhodnocení po dokončení zpracování dat:

JSON_call(SRC, JSONP, JSONPP, ONLOAD) ;

nakonec se otočí

Ans = JSONP(SRC) ( eval(JSONPP(ans) ) ; eval(ONLOAD) ; )

Obecně není počet parametrů pro samotný nápad JSONPP důležitý. Stačí SRC, JSONP, JSONPP (a jejich zpracování na straně serveru a následně na straně klienta), aby to byl JSONPP.

Podívejme se na příklad práce se službou S3DB.

Funkce s3db_jsonpp_call(src, next_eval) ( var call = "call_" + Math .random () .toString () .replace (/\./g, "" ) ; var headID = document.getElementsByTagName ("head" ) [ 0 ] ; var script = document.createElement ("script" ) ; script.id = volání; script.type = "text/javascript" ; // pomocí vycpaného, ​​parametrizovaného json src = src+ "&format=json&jsonp=s3db_jsonpp&jsonpp=" + next_eval+ "&onload=remove_element_by_id("" + script.id + "")" ; script.src = src; headID.appendChild (script) ; // načtení odpovědi ) funkce s3db_jsonpp(ans, jsonpp) ( eval(jsonpp) ; return ans ; ) funkce remove_element_by_id(id) ( var e = document.getElementById (id) ; e.parentNode .removeChild (e) ; return false ; )

V příkladu funkce s3db_jsonpp_call() vytvoří element skriptu v DOM v části head, jehož src odpovídá volání JSONPP.

Po obdržení odpovědi ze serveru se zavolá s3db_jsonpp() - předá se v parametrech volání, jak by to mělo být podle pravidel JSONP.

Uvnitř s3db_jsonpp() se spustí eval(jsonpp) a vrátí hodnotu ans.

Volání eval(onload) vede ke spuštění remove_element_by_id() s id vytvořeného skriptu v hlavě a nakonec k jeho smazání, protože stejně nebude použito, protože id v příkladu bylo vygenerováno náhodně na samém začátku funkce s3db_jsonpp_call(). Toto volání je v odpovědi serveru.

Objektové reference

Standard JSON nepodporuje odkazy na objekty, ale sada nástrojů Dojo ukazuje, jak může standardní JSON podporovat takové odkazy pomocí dalších konvencí. Zejména modul dojox.json.ref poskytuje podporu pro několik forem odkazů, včetně kruhových, vícenásobných, mezidokumentových a líných odkazů.

Viz také Poznámky
  • YAML Ain't Markup Language (YAML™) verze 1.2 (angličtina) . - Pracovní návrh 2008-05-11. (nepřístupný odkaz - příběh) Staženo 24. září 2009.
  • . RedHanded (7. dubna 2005). Staženo 25. září 2012. .
  • Json.Com Návrh schématu JSON (nepřístupný odkaz - příběh)
  • RFC 4627
  • JSON: Alternativa k XML bez tuku. Archivováno
  • json2.js (anglicky) . Archivováno z originálu 12. února 2012. Získáno 24. září 2009.
  • Použití vestavěného JSON.
  • Vložený JSON v IE8. Archivováno z originálu 12. února 2012.
  • Specifikace webu podporované v Opera Presto 2.5 (anglicky) (10. března 2010). Archivováno z originálu 12. února 2012. Získáno 29. března 2010.
  • ES 3.1 implementace objektu JSON.
  • Vstupenka #4429lang=cs . Archivováno z originálu 12. února 2012.
  • Vstupenka č. 4429 (22. května 2009). Archivováno z originálu 12. února 2012. Získáno 3. července 2009.
  • Vstupenka #8111lang=cs . Archivováno z originálu 12. února 2012.
  • Jádro MooTools a další 1.3.1. Archivováno z originálu 12. února 2012.
  • YUI 2: Nástroj JSON (1. září 2009). Archivováno z originálu 12. února 2012. Získáno 22. října 2009.
  • Naučte se JSON (7. dubna 2010). Archivováno z originálu 12. února 2012. Získáno 7. dubna 2010.
  • Jeremy Grossman Pokročilé techniky útoku proti webovým aplikacím pomocí GMail. Zabezpečení WhiteHat. Archivováno z originálu 12. února 2012. Získáno 23. září 2009.
  • z __future__ import * » Vzdálený JSON - JSONP . Bob.pythonmac.org. Archivováno z originálu 12. února 2012. Získáno 8. září 2008.
  • Almeida, Jonas (11. června 2008). "JSON, JSONP, JSONPP? "(S3DB). Získáno 26. 4. 2009.
  • RIAspot JSON P pro Cross Site XHR .(nepřístupný odkaz - příběh)
  • Odkazování na JSON v Dojo. Archivováno z originálu 12. února 2012.
  • Odkazy
    • Domovská stránka oficiálního formátu v ruštině
    • json.js, json2.js je knihovna vyvinutá Douglasem Crockfordem pro práci s daty JSON v JavaScriptu. Rozšiřuje objekt o metodu toJSONString, která je pak přítomná v libovolném objektu, a převádí jej na řetězec formátu JSON.
    • json-rpc.org (anglicky)
    Značkovací jazyky dokumentůKancelářské dokumenty

    JSON neboli JavaScript Object Notation je formát, který implementuje nestrukturovanou textovou reprezentaci strukturovaných dat na principu párů klíč-hodnota a uspořádaných seznamů. Přestože JSON pochází z JavaScriptu, je podporován ve většině jazyků, ať už nativně nebo pomocí speciálních knihoven. Typicky se Json používá k výměně informací mezi webovými klienty a webovým serverem.

    Za posledních 15 let se JSON stal formálním standardem pro výměnu dat a používá se prakticky všude na internetu. Dnes jej používají téměř všechny webové servery. Dalším důvodem této popularity byla skutečnost, že mnoho databází podporovalo JSON. Moderní relační databáze jako PostgreSQL a MySQL nyní podporují ukládání a export dat v JSON. Databáze jako MongoDB a Neo4j také podporují JSON, ačkoli MongoDB používá mírně upravenou verzi JSON. V tomto článku se podíváme na to, co je JSON, jeho výhody oproti XML, jeho nevýhody a kdy je nejlepší jej použít.

    Abyste pochopili, proč je formát JSON potřebný a jak funguje, potřebujete praxi. Nejprve se podívejme na tento příklad:

    {
    "firstName": "Jonathan",
    "příjmení": "Freeman",
    "loginCount": 4,
    "isWriter": pravda,
    "worksWith": ["Spantree Technology Group", "InfoWorld"],
    "domácí mazlíčci": [
    {
    "jméno": "Lilly",
    "typ": "mýval"
    }
    ]
    }

    V tomto rámci jsme jasně definovali některé atributy člověka. Nejprve jsme zjišťovali jméno, příjmení, počet přihlášení do systému, zda je tato osoba spisovatelem, seznam společností, se kterými spolupracuje, a seznam domácích mazlíčků. Tuto nebo podobnou strukturu lze ze serveru přenést do webového prohlížeče nebo mobilní aplikace, která si pak s těmito daty může dělat, co potřebuje, například je zobrazovat nebo ukládat.

    JSON je obecný datový formát s minimálním počtem typů hodnot – řetězců, čísel, booleanů (jedna nebo nula), seznamů, objektů a null. I když je JSON podmnožinou JavaScriptu, většina populárních programovacích jazyků má tyto typy dat, takže JSON je dobrým kandidátem pro předávání dat mezi programy napsanými v různých jazycích.

    Proč byste měli používat JSON?

    Abychom pochopili užitečnost a důležitost JSON, musíme trochu porozumět historii interaktivity na internetu. Na počátku roku 2000 se interaktivita webových stránek začala měnit. Prohlížeč tehdy sloužil pouze k zobrazování informací a veškerou práci na přípravě obsahu k zobrazení odvedl webový server. Když uživatel klikl na tlačítko v prohlížeči, byl odeslán požadavek na server, kde byla sestavena a odeslána HTML stránka připravená k zobrazení. Tento mechanismus byl pomalý a neúčinný. To vyžadovalo, aby prohlížeč znovu vykreslil vše na stránce, i když se změnila malá část dat.

    V té době byly přenosy zpoplatněny podle množství přenesených dat, takže si vývojáři uvědomili, že opětovné načtení celé stránky je velmi nákladné a zvažovali nové technologie pro vylepšení uživatelského rozhraní. Pak se možnost vytvářet webové požadavky na pozadí, která byla přidána v Internet Exploreru 5, ukázala jako docela životaschopný přístup k postupnému načítání dat pro zobrazení. Místo opětovného načtení stránky kliknutím na tlačítko jednoduše vydáte webový požadavek, který poběží na pozadí. Obsah bude aktualizován, jakmile bude načten. Lze jej ovládat pomocí JavaScriptu, univerzálního programovacího jazyka pro prohlížeče.

    Zpočátku byla data přenášena ve formátu XML, ale použití v JavaScriptu bylo obtížné. JavaScript již měl objekty, které se používaly k reprezentaci dat v jazyce, takže Douglas Crockford vzal syntaxi objektů JS a použil ji jako specifikaci pro nový formát pro výměnu dat nazvaný JSON. Tento formát byl mnohem snazší číst a analyzovat v prohlížeči JavaScript. Brzy začali vývojáři místo XML používat JSON.

    V dnešní době je rychlá výměna dat JSON de facto standardem pro přenos dat mezi serverem a klientem, mobilními aplikacemi a dokonce i interními systémovými službami.

    JSON vs XML

    Jak jsem řekl výše, hlavní alternativou k JSON bylo a je XML. XML je však v nových systémech stále méně běžné. A je velmi snadné pochopit proč. Níže je uveden příklad zápisu dat, která jste viděli výše v Json, prostřednictvím XML:


    Jonathan
    Freeman
    4
    skutečný

    Spantree Technology Group
    InfoWorld

    Lilly
    Mýval


    Kromě redundance kódu, který v podstatě zabíral dvakrát tolik místa pro zápis dat, přináší XML také určité nejasnosti při analýze datové struktury. Převod XML na objekt JavaScript může trvat desítky až stovky řádků kódu a vyžaduje jemné doladění pro každý analyzovaný objekt. Převod JSON na objekt JavaScriptu se provádí na jednom řádku a nevyžaduje žádné předchozí znalosti o analyzovaném objektu.

    Omezení JSON

    Přestože je JSON relativně komprimovaný a flexibilní datový formát, se kterým se snadno pracuje v mnoha programovacích jazycích, má určité nevýhody. Zde jsou některá omezení:

    • Žádná struktura. Na jedné straně to znamená, že máte naprostou flexibilitu prezentovat data jakýmkoli způsobem, který chcete. Na druhou stranu můžete snadno ukládat nestrukturovaná data.
    • Pouze jeden typ čísel. Podporován je formát IEEE-754 s plovoucí desetinnou čárkou a dvojnásobnou přesností. To je docela hodně, ale nemůžete použít různé číselné typy, které mají jiné jazyky.
    • Žádný typ data. vývojáři musí používat řetězcové reprezentace dat, což může způsobit nekonzistenci formátování. Nebo použijte jako datum počet milisekund, které uplynuly od začátku epochy Unixu (1. ledna 1970).
    • Žádné komentáře – Přímo v kódu nebudete moci anotovat pole, která je vyžadují.
    • Podrobný – I když je JSON méně podrobný než XML, není to nejvýstižnější formát pro výměnu dat. Pro špičkové nebo specializované služby budete chtít používat efektivnější formáty.
    Kdy byste měli použít JSON?

    Pokud vyvíjíte software, který spolupracuje s prohlížečem nebo nativní mobilní aplikací, je lepší používat JSON. Používání XML je zastaralé. Pro komunikaci mezi servery nemusí být JSON příliš efektivní a je lepší použít serializační framework podobný Apache Avro nebo Apache Thrift. Ani zde není JSON špatnou volbou a dokáže vám poskytnout vše, co potřebujete. Neexistuje ale přesná odpověď, co si vybrat.

    Pokud používáte databáze MySQL, bude váš program silně záviset na tom, co se v databázi dělá. V relačních databázích, které podporují JSON, se považuje za dobrou praxi používat jej co nejméně. Relační databáze byly navrženy pro data se specifickým schématem. Většina z nich sice nyní podporuje datový formát JSON, ale výkon práce s ním bude výrazně nižší.

    závěry

    JSON je datový formát zaměřený především na odesílání dat mezi webovými servery a prohlížeči nebo mobilními aplikacemi. Formát má jednoduchý design a flexibilitu, je snadno čitelný a srozumitelný a lze s takovými daty snadno pracovat ve většině programovacích jazyků. Absence přísného schématu umožňuje flexibilitu formátu, ale tato flexibilita může někdy ztížit čtení a pochopení dat.

    Možná budete mít problém pracovat s JSON v silně typizovaných jazycích, jako je Scala nebo Elm, ale rozšířené přijetí formátu znamená, že existují nástroje a knihovny, které vám pomohou i se složitými problémy. Nyní víte, co je json a jak jej používat.

    Co je JSON a co umí? V tomto článku se dozvíte, jak pomocí JSON snadno pracovat s daty. Podíváme se také na to, jak pracovat s JSON pomocí PHP a JavaScriptu.

    Pokud jste vyvíjeli webové stránky nebo webové aplikace obecně, je pravděpodobné, že jste o JSON alespoň zběžně slyšeli. Ale co přesně znamená JSON? Co tento datový formát umí a jak jej lze použít?

    V tomto článku se naučíme základy práce s formátem json. Budeme sledovat následující témata:

    • Co je formát JSON?
    • Jak vytvořit řetězce JSON?
    • Jednoduchý příklad dat JSON
    • Porovnání JSON s XML

    Začněme!

    Co je formát JSON?

    JSON je jednoduchý textový způsob ukládání a přenosu strukturovaných dat. Pomocí jednoduché syntaxe můžete snadno ukládat jak jednoduchá čísla a řetězce, tak pole a objekty, a to pouze pomocí textu. Můžete také propojit objekty a pole, což vám umožní vytvářet složité datové struktury.

    Jakmile je řetězec JSON vytvořen, lze jej snadno odeslat do jakékoli aplikace nebo počítače, protože se jedná pouze o text.

    JSON má mnoho výhod:

    • Je kompaktní
    • Je čitelný pro člověka a snadno čitelný na počítači
    • Lze jej snadno převést do softwarových formátů: číselné hodnoty, řetězce, booleovský formát, nulová hodnota, pole a asociativní pole.
    • Téměř všechny programovací jazyky mají funkce, které vám umožňují číst a vytvářet datový formát json.

    Doslova zkratka JSON znamená JavaScript Object Notation. Jak bylo popsáno dříve, tento formát je založen na vytváření objektů, něco podobného jako asociativní pole v jiných programovacích jazycích.

    K jakým účelům se používá JSON?

    Json se používá především k výměně dat mezi javascriptem a serverovou stranou (php). Jinými slovy, pro technologii ajax. To je velmi výhodné, když předáváte více proměnných nebo celá datová pole.

    V příkladu to vypadá takto:

  • Uživatel klikne na miniaturu obrázku
  • JavaScript zpracuje tuto událost a odešle požadavek ajax do skriptu PHP a předá ID obrázku.
  • Na serveru php obdrží popis obrázku, název obrázku, adresu k velkému obrázku a další informace z databáze. Po obdržení jej převede do formátu JSON a odešle zpět na stránku uživatele.
  • JavaScript přijme odpověď ve formě JSON, zpracuje data, vygeneruje html kód a zobrazí zvětšený obrázek s popisem a dalšími informacemi.
  • Takto se obrázek zvětší bez opětovného načtení stránky v prohlížeči. To je velmi výhodné, když potřebujeme přijmout částečná data nebo přenést malé množství informací na server.

    Všem oblíbený jQuery má funkce getJSON() a parseJSON(), které vám pomohou pracovat s formátem prostřednictvím ajaxových požadavků.

    Jak vytvořit řetězce JSON?


    Níže jsou uvedena základní pravidla pro vytváření řetězců JSON:

    • Řetězec JSON obsahuje pole hodnot i objekt (asociativní pole s páry název/hodnota).
    • Pole musí být zabaleno do hranatých závorek [ a ] ​​a může obsahovat seznam hodnot, které jsou odděleny čárkou.
    • Objekty jsou zabaleny pomocí složených ramen ( a ) a také obsahují páry název/hodnota oddělené čárkou.
    • Páry název/hodnota se skládají z názvu pole (ve dvojitých uvozovkách), za kterým následuje dvojtečka (:) následovaná hodnotou pole.
    • Hodnoty v poli nebo objektu mohou být:
      • Číselné (celé číslo nebo tečkovaný zlomek)
      • Řetězce (zabalené do dvojitých uvozovek)
      • Boolean (pravda nebo nepravda)
      • Další pole (zabalené v hranatých závorkách [ a ])
      • Jiné předměty (zabalené do kudrnatých paží ( a ))
      • Nulová hodnota

    Důležité! Pokud v hodnotách používáte dvojité uvozovky, uzavřete je zpětným lomítkem: \". Můžete také použít hexadecimálně kódované znaky, stejně jako v jiných programovacích jazycích.

    Jednoduchý příklad dat JSON

    Následující příklad ukazuje, jak můžete uložit data do „košíku“ internetového obchodu pomocí formátu JSON:

    ("orderID": 12345, "shopperName": "John Smith", "shopperEmail": " [e-mail chráněný]", "contents": [ ( "productID": 34, "productName": "SuperWidget", "quantity": 1), ( "productID": 56, "productName": "WonderWidget", "quantity": 3) ], "orderCompleted": true)

    Pojďme si tato data rozebrat kousek po kousku:

  • Na začátku a na konci použijeme složená ramena ( a ), aby bylo jasné, že se jedná o předmět.
  • Uvnitř objektu máme několik párů jméno/hodnota:
  • "orderID": 12345 - pole s názvem orderId a hodnotou 12345
  • "shopperName": "John Smith" - pole s názvem shopperName a hodnota John Smith
  • "shopperEmail": "johnsmith@ example.com" - podobně jako v předchozím poli je zde uložen e-mail kupujícího.
  • "contents": [ ... ] - pole s názvem content, jehož hodnotou je pole.
  • "orderCompleted": true - pole s názvem orderCompleted, jehož hodnota je true
  • Uvnitř pole content máme dva objekty, které zobrazují obsah košíku. Každý objekt produktu má tři vlastnosti: productID, productName, množství.
  • A konečně, protože JSON je identický s objekty v JavaScriptu, můžete si snadno vzít tento příklad a vytvořit z něj objekt JavaScript:

    var cart = ("orderID": 12345, "shopperName": "John Smith", "shopperEmail": " [e-mail chráněný]", "contents": [ ( "productID": 34, "productName": "SuperWidget", "quantity": 1), ( "productID": 56, "productName": "WonderWidget", "quantity": 3) ], "orderCompleted": true );

    Porovnání JSON s XML

    JSON si ve většině případů představíte jako alternativu k XML – alespoň v rámci webových aplikací. Koncept Ajax původně používá XML k výměně dat mezi serverem a prohlížečem, ale v posledních letech se JSON stal populárnějším pro přenos ajaxových dat.

    Ačkoli je XML osvědčená technologie, kterou používá mnoho aplikací, výhody formátu JSON spočívají v tom, že je kompaktnější a snadněji se píše a čte.

    Zde je výše uvedený příklad JSON, pouze přepsaný ve formátu XML:

    orderID 12345 shopperName John Smith shopperEmail [e-mail chráněný] obsah productID 34 productName SuperWidget množství 1 productID 56 productName WonderWidget množství 3 orderCompleted true

    Jak vidíte, je několikrát delší než JSON. Ve skutečnosti je tento příklad dlouhý 1128 znaků, zatímco verze JSON má pouze 323 znaků. Verze XML je také obtížnější na čtení.

    Přirozeně nelze soudit jen podle jednoho příkladu, ale i malá množství informací zabírají ve formátu JSON méně místa než v XML.

    Jak pracovat s JSON přes PHP a JS?

    Nyní se dostáváme k nejzajímavější části – praktické stránce formátu JSON. Nejprve vzdáme hold JavaScriptu a pak uvidíme, jak můžete manipulovat s JSON prostřednictvím PHP.

    Vytváření a čtení formátu JSON pomocí JavaScriptu


    I když je formát JSON jednoduchý, při vývoji webových aplikací je obtížné psát ručně. Navíc často musíte převést řetězce JSON na proměnné a poté je použít ve svém kódu.

    Naštěstí mnoho programovacích jazyků poskytuje nástroje pro práci s řetězci JSON. Hlavní myšlenka, která:

    Chcete-li vytvořit řetězce JSON, začnete s proměnnými obsahujícími nějaké hodnoty a poté je předáte funkcí, která převede data na řetězec JSON.

    Při čtení řetězců JSON začínáte řetězcem JSON obsahujícím určitá data, řetězec procházíte funkcí, která vytváří proměnné obsahující data.

    Podívejme se, jak se to dělá v JavaScriptu.

    Vytvoření řetězce JSON z proměnné JavaScriptu

    JavaScript má vestavěnou metodu JSON.stringify(), která přebírá proměnnou javascriptu a vrací řetězec json představující obsah proměnné. Použijme například dříve vytvořený objekt a převeďte jej na řetězec JSON.

    var cart = ("orderID": 12345, "shopperName": "John Smith", "shopperEmail": " [e-mail chráněný]", "contents": [ ( "productID": 34, "productName": "SuperWidget", "quantity": 1), ( "productID": 56, "productName": "WonderWidget", "quantity": 3) ], "orderCompleted": true ); alert (JSON.stringify(cart));

    Na obrazovce se objeví toto:

    ("orderID":12345,"shopperName":"John Smith","shopperEmail":" [e-mail chráněný]", "contents":[("productID":34,"productName":"SuperWidget","quantity":1), ("productID":56,"productName":"WonderWidget","quantity":3) ], "objednávka dokončena":true)

    Všimněte si, že JSON.stringify() vypisuje řetězce JSON bez mezer. Je špatně čitelný, ale je skladnější, což je důležité při odesílání dat.

    Vytvoření proměnné JavaScriptu z řetězce JSON

    Existuje několik způsobů, jak analyzovat řetězce JSON, nejpřijatelnější a nejbezpečnější je použití metody JSON.parse(). Vezme řetězec JSON a vrátí objekt nebo pole JavaScriptu obsahující data JSON. Zde je příklad:

    var jsonString = " \ ( \ "ID objednávky": 12345, \ "jméno nakupujícího": "Jan Novák", \ "e-mail nakupujícího": " [e-mail chráněný]", \ "obsah": [ \ ( \ "productID": 34, \ "productName": "SuperWidget", \ "množství": 1 \), \ ( \ "productID": 56, \ "productName": " WonderWidget", \"množství": 3\ ) \ ], \"objednávka dokončena": true \ ) \"; var cart = JSON.parse(jsonString); alert(cart.shopperEmail); alert(cart.contents.productName);

    Zde jsme vytvořili proměnnou jsonString, která obsahuje řetězec JSON z dříve poskytnutých příkladů. Poté jsme tento řetězec předali přes JSON.parse(), abychom vytvořili objekt obsahující data JSON, která byla uložena v proměnné košíku. Nakonec zkontrolujeme dostupnost dat a zobrazíme některé informace pomocí výstražného modálního okna.

    Zobrazí se následující informace:

    Ve skutečné webové aplikaci by váš kód JavaScript měl obdržet řetězec JSON jako odpověď ze serveru (po odeslání požadavku AJAX), poté řetězec analyzovat a zobrazit uživateli obsah košíku.

    Vytváření a čtení formátu JSON pomocí PHP

    PHP, stejně jako JavaScript, má funkce, které umožňují převádět proměnné do formátu JSON a naopak. Pojďme se na ně podívat.

    Vytvoření řetězce JSON z proměnné PHP

    Json_encode() bere proměnnou PHP a vrací řetězec JSON představující data proměnné. Zde je náš příklad „košíku“ napsaného v PHP:

    Tento kód vytváří přesně stejný výsledek jako příklad JavaScriptu – platný řetězec JSON představující obsah proměnných:

    ("orderID":12345,"shopperName":"John Smith","shopperEmail":" [e-mail chráněný]","contents":[("productID":34,"productName":"SuperWidget","quantity":1),("productID":56,"productName":"WonderWidget","quantity":3) ],"orderCompleted":true)

    Ve skutečnosti by váš PHP skript měl odeslat řetězec JSON jako odpověď na požadavek AJAX, kde JavaScript použije JSON.parse() k přeměně řetězce na proměnné.

    Ve funkci json_encode() můžete zadat další parametry, které vám umožní převést některé znaky na hex.

    Vytvoření proměnné PHP z řetězce JSON

    Podobně jako výše existuje funkce json_decode(), která vám umožňuje dekódovat řetězce JSON a vkládat obsah do proměnných.

    Stejně jako u JavaScriptu tento kód vypíše následující:

    [e-mail chráněný] WonderWidget

    Ve výchozím nastavení vrací json_decode() objekty JSON jako objekty PHP. Podobně jako u běžné syntaxe používáme -> pro přístup k vlastnostem objektu.

    Pokud později budete chtít data použít jako asociativní pole, jednoduše předejte druhý parametr true funkci json_decode(). Zde je příklad:

    $cart = json_decode($jsonString, true); echo $cart["shopperEmail"] . "
    "; echo $cart["contents"]["productName"] ."
    ";

    Výsledkem je stejný výsledek:

    [e-mail chráněný] WonderWidget

    Funkci json_decode() můžete také předat další argumenty, abyste určili zpracování velkých čísel a rekurzi.

    Na závěr o formátu JSON

    Pokud se chystáte vytvořit webovou aplikaci pomocí technologie Ajax, jistě využijete formát JSON pro výměnu dat mezi serverem a prohlížečem.


    Určitě jste někdy slyšeli o JSON. Co je to? Co umí a jak ji používat?

    V tomto tutoriálu probereme základy JSON a pokryjeme následující body:

    • Co je JSON?
    • K čemu se používá JSON?
    • Jak vytvořit řetězec JSON?
    • Jednoduchý příklad řetězce JSON.
    • Porovnejme JSON a XML.
    • Jak pracovat s JSON v JavaScriptu a PHP?
    Co je JSON?

    JSON je jednoduchý textový způsob ukládání a přenosu strukturovaných dat. S jednoduchou syntaxí můžete snadno uložit cokoli od jednoho čísla po řetězce, pole a objekty v prostém textu. Můžete také propojit pole a objekty dohromady a vytvořit tak složité datové struktury.

    Jakmile je řetězec JSON vytvořen, je snadné jej odeslat do jiné aplikace nebo na jiné místo v síti, protože se jedná o prostý text.

    JSON má následující výhody:

    • Je kompaktní.
    • Jeho věty jsou snadno čitelné a složené jak lidmi, tak počítači.
    • Lze jej snadno převést do datové struktury pro většinu programovacích jazyků (čísla, řetězce, booleany, pole atd.)
    • Mnoho programovacích jazyků má funkce a knihovny pro čtení a vytváření struktur JSON.

    Název JSON je zkratka pro JavaScript Object Notation. Jak název napovídá, je založen na způsobu definování objektů (podobně jako vytváření asociativních polí v jiných jazycích) a polí.

    K čemu se používá JSON?

    Nejběžnějším použitím JSON je odesílání dat ze serveru do prohlížeče. Data JSON se obvykle doručují pomocí technologie AJAX, která umožňuje prohlížeči a serveru komunikovat bez nutnosti znovu načítat stránku.

  • Uživatel klikne na miniaturu produktu v internetovém obchodě.
  • JavaScript spuštěný v prohlížeči generuje požadavek AJAX na PHP skript běžící na serveru a předává ID vybraného produktu.
  • PHP skript získá název produktu, popis, cenu a další informace z databáze. Poté z dat sestaví řetězec JSON a odešle jej do prohlížeče.
  • JavaScript spuštěný v prohlížeči přijme řetězec JSON, dekóduje jej a zobrazí informace o produktu na stránce pro uživatele.
  • JSON můžete také použít k odesílání dat z prohlížeče na server předáním řetězce JSON jako parametru do požadavků GET nebo POST. Tato metoda je však méně běžná, protože přenos dat prostřednictvím požadavků AJAX lze zjednodušit. ID produktu může být například zahrnuto do adresy URL jako součást požadavku GET.

    Knihovna jQuery má několik metod, jako je getJSON() a parseJSON(), které usnadňují načítání dat pomocí JSON prostřednictvím požadavků AJAX.

    Jak vytvořit řetězec JSON?

    Existuje několik základních pravidel pro vytvoření řetězce JSON:

    • Řetězec JSON obsahuje buď pole hodnot, nebo objekt (asociativní pole párů název/hodnota).
    • Pole je uzavřeno v hranatých závorkách ([ a ]) a obsahuje seznam hodnot oddělených čárkami.
    • Objekt je uzavřen ve složených závorkách (( a )) a obsahuje čárkami oddělený seznam párů název/hodnota.
    • dvojice jméno/hodnota se skládá z názvu pole uzavřeného do dvojitých uvozovek, za nímž následuje dvojtečka (:) a hodnota pole.
    • Význam v poli nebo objektu může být:
      • Číslo (celé číslo nebo s plovoucí desetinnou čárkou)
      • Řetězec (ve dvojitých uvozovkách)
      • Booleovská hodnota (true nebo false)
      • Další pole (uzavřené v hranatých závorkách)
      • Další objekt (uzavřený ve složených závorkách)
      • nulová hodnota

    Chcete-li do řetězce vložit dvojité uvozovky, musíte použít zpětné lomítko: \" . Stejně jako u mnoha programovacích jazyků můžete do řetězce vložit řídicí znaky a hexadecimální kódy tak, že je předáte zpětným lomítkem. Podrobnosti najdete na webu JSON.

    Jednoduchý příklad řetězce JSON

    Níže je uveden příklad objednávky ve formátu JSON:

    ( "orderID": 12345, "shopperName": "Vanya Ivanov", "shopperEmail": " [e-mail chráněný]", "contents": [ ( "productID": 34, "productName": "Super produkt", "quantity": 1), ( "productID": 56, "productName": "zázračný produkt", "množství": 3) ], "orderCompleted": true )

    Podívejme se na řádek podrobně:

    • Objekt vytvoříme pomocí složených závorek (( ​​a )).
    • Objekt má několik párů název/hodnota: "orderID": 12345 Vlastnost s názvem "orderId" a celočíselnou hodnotou 12345 "shopperName": "Vanya Ivanov" vlastnost s názvem "shopperName" a hodnotou řetězce "Vanya Ivanov" " "shopperEmail": " [e-mail chráněný]" Vlastnost s názvem "shopperEmail" s hodnotou řetězce " [e-mail chráněný]" "contents": [ ... ] Vlastnost s názvem "contents", jejíž hodnota je pole "orderCompleted": true Vlastnost s názvem "orderCompleted" a logická hodnota true
    • V poli "contents" jsou 2 objekty představující jednotlivé položky v objednávce. Každý objekt obsahuje 3 vlastnosti: productID , productName a množství .

    Mimochodem, protože JSON je založen na deklarování objektů JavaScriptu, můžete z výše uvedeného řetězce JSON rychle a snadno vytvořit objekt JavaScriptu:

    var cart = ( "orderID": 12345, "shopperName": "Vanya Ivanov", "shopperEmail": " [e-mail chráněný]", "contents": [ ( "productID": 34, "productName": "Super produkt", "quantity": 1), ( "productID": 56, "productName": "zázračný produkt", "množství": 3 ) ], "objednávka dokončena": true );

    Srovnání JSON a XML

    JSON si v mnoha ohledech můžete představit jako alternativu k XML, alespoň v prostoru webových aplikací. Koncept AJAX byl původně založen na použití XML pro přenos dat mezi serverem a prohlížečem. V posledních letech se však JSON stává stále populárnějším pro přenos dat AJAX.

    Zatímco XML je osvědčená technologie, která se používá v nemalém počtu aplikací, JSON má výhodu kompaktnějšího a snáze rozpoznatelného formátu dat.

    Takto by vypadal výše uvedený příklad objektu v XML:

    orderID 12345 shopperName Vanya Ivanov shopperEmail [e-mail chráněný] obsah ID produktu 34 produkt název Super množství produktu 1 produkt ID 56 produkt název Miracle množství produktu 3 objednávkaSplněno pravda

    Verze XML je výrazně větší. Ve skutečnosti má 1128 znaků, zatímco verze JSON má pouze 323 znaků. Verze XML je také poměrně obtížné pochopit.

    Samozřejmě, toto je radikální příklad. A je možné vytvořit kompaktnější XML záznam. Ale i to bude výrazně delší než ekvivalent JSON.

    Práce s řetězcem JSON v JavaScriptu

    JSON má jednoduchý formát, ale ruční vytváření řetězce JSON je docela zdlouhavé. Navíc často potřebujete vzít řetězec JSON, převést jeho obsah na proměnnou, kterou lze použít v kódu.

    Většina programovacích jazyků má nástroje pro snadný převod proměnných na řetězce JSON a naopak.

    Vytvoření řetězce JSON z proměnné

    JavaScript má vestavěnou metodu JSON.stringify(), která přebírá proměnnou a vrací řetězec JSON představující její obsah. Vytvořme například objekt JavaScript, který obsahuje informace o objednávce z našeho příkladu, a poté z něj vytvořte řetězec JSON:

    var cart = ( "orderID": 12345, "shopperName": "Vanya Ivanov", "shopperEmail": " [e-mail chráněný]", "contents": [ ( "productID": 34, "productName": "Super produkt", "quantity": 1), ( "productID": 56, "productName": "zázračný produkt", "množství": 3) ], "orderCompleted": true ); alert (JSON.stringify(cart));

    Tento kód vytvoří:

    Všimněte si, že metoda JSON.stringify() vrací řetězec JSON bez mezer. Je obtížněji čitelný, ale pro přenos po síti je kompaktnější.

    Existuje několik způsobů, jak analyzovat řetězec JSON v JavaScriptu, ale nejbezpečnější a nejspolehlivější je použít vestavěnou metodu JSON.parse(). Přijme řetězec JSON a vrátí objekt nebo pole JavaScriptu, které obsahuje data. Například:

    var jsonString = " \ ( \ "ID objednávky": 12345, \ "název nakupujícího": "Vanya Ivanov", \ "e-mail nakupujícího": " [e-mail chráněný]", \ "obsah": [ \ ( \ "productID": 34, \ "productName": "Super produkt", \ "množství": 1 \), \ ( \ "productID": 56, \ "productName": "Zázračné zboží", \"množství": 3\ ) \ ], \"objednávka dokončena": pravda \ ) \"; var cart = JSON.parse(jsonString); alert(cart.shopperEmail); alert(cart.contents.productName);

    Vytvořili jsme proměnnou jsonString, která obsahuje řetězec JSON naší vzorové objednávky. Tento řetězec pak předáme metodě JSON.parse(), která vytvoří objekt obsahující data JSON a uloží je do proměnné košíku. Zbývá pouze zkontrolovat zobrazením vlastností objektu shopperEmail a productName pole content.

    V důsledku toho získáme následující výstup:

    Ve skutečné aplikaci by váš kód JavaScript obdržel objednávku jako řetězec JSON v odpovědi AJAX ze skriptu serveru, předal řetězec metodě JSON.parse() a poté použil data k jeho zobrazení na stránce uživatele.

    JSON.stringify() a JSON.parse() mají další možnosti, jako je použití funkcí zpětného volání k vlastní konverzi určitých dat. Tyto možnosti jsou velmi užitečné pro převod různých dat na správné objekty JavaScriptu.

    Práce s řetězcem JSON v PHP

    PHP, stejně jako JavaScript, má vestavěné funkce pro práci s řetězci JSON.

    Vytvoření řetězce JSON z proměnné PHP

    Funkce json_encode() přebírá proměnnou PHP a vrací řetězec JSON představující obsah proměnné. Zde je náš příklad objednávky napsaný v PHP:

    Tento kód vrací přesně stejný řetězec JSON jako v příkladu JavaScriptu:

    ("orderID":12345,"shopperName":"Vanya Ivanov","shopperEmail":" [e-mail chráněný]","contents":[("productID":34,"productName":"Super produkt","quantity":1),("productID":56,"productName":"Zázračný produkt","množství": 3)],"orderCompleted":true)

    Ve skutečné aplikaci váš PHP skript odešle tento řetězec JSON jako součást odpovědi AJAX do prohlížeče, kde jej kód JavaScript pomocí metody JSON.parse() analyzuje zpět do proměnné, která se zobrazí na stránce uživatele. .

    Funkci json_encode() můžete předat různé příznaky jako druhý argument. S jejich pomocí můžete změnit principy kódování obsahu proměnných do řetězce JSON.

    Vytvořte proměnnou z řetězce JSON

    Chcete-li převést řetězec JSON na proměnnou PHP, použijte metodu json_decode(). Nahraďte náš příklad pro JavaScript metodou JSON.parse() kódem PHP:

    Stejně jako u JavaScriptu tento kód vytvoří:

    [e-mail chráněný] Zázračný produkt

    Ve výchozím nastavení vrací funkce json_decode() objekty JSON jako objekty PHP. Existují obecné objekty PHP třídy stdClass. Proto používáme -> pro přístup k vlastnostem objektu ve výše uvedeném příkladu.

    Pokud potřebujete objekt JSON jako přidružené pole PHP, musíte funkci json_decode() předat hodnotu true jako druhý argument. Například:

    $cart = json_decode($jsonString, true); echo $cart["shopperEmail"] . "
    "; echo $cart["contents"]["productName"] ."
    ";

    Tento kód vytvoří stejný výstup:

    [e-mail chráněný] Zázračný produkt

    Funkci json_decode() můžete také předat další argumenty, abyste určili hloubku rekurze a způsob zpracování velkých celých čísel.

    Závěr

    Přestože je JSON snadno pochopitelný a použitelný, je to velmi užitečný a flexibilní nástroj pro přenos dat mezi aplikacemi a počítači, zejména při použití AJAX. Pokud plánujete vývoj AJAX aplikace, pak není pochyb o tom, že JSON se stane nezbytným nástrojem ve vaší dílně.