{"id":586,"date":"2024-05-09T09:03:58","date_gmt":"2024-05-09T09:03:58","guid":{"rendered":"https:\/\/iseebugs.pl\/?p=586"},"modified":"2024-05-09T09:03:58","modified_gmt":"2024-05-09T09:03:58","slug":"json","status":"publish","type":"post","link":"https:\/\/iseebugs.pl\/index.php\/2024\/05\/09\/json\/","title":{"rendered":"JSON"},"content":{"rendered":"\n<p>JSON &#8211; JavaScript Object Notation, jest to lekki format wymiany danych komputerowych. Ale co to tak naprawd\u0119 znaczy i po co to jest?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Wykorzystanie<\/h2>\n\n\n\n<p>JSON&#8217;a wykorzystuje si\u0119 przy przesy\u0142aniu danych pomi\u0119dzy urz\u0105dzeniami np. pomi\u0119dzy naszymi przegl\u0105darkami a serwerami gdzie znajduj\u0105 si\u0119 dane. Cz\u0119sto zamiast pojedynczej danej chcemy przes\u0142a\u0107 list\u0119 warto\u015b\u0107 lub co jest cz\u0119\u015bciej spotykane obiekt lub zbi\u00f3r obiekt\u00f3w kt\u00f3re posiadaj\u0105 nazw\u0119 i przypisan\u0105 do niej warto\u015b\u0107 wraz z informacjami jakie ze sob\u0105 niesie. Do tego zadania idealnie nadaje si\u0119 JSON.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Schemat przesy\u0142anych danych<\/h2>\n\n\n\n<p>Dane s\u0105 budowane na zasadzie pary nazwa &#8211; warto\u015b\u0107 oddzielone dwukropkiem. Ka\u017cda kolejna dana jest oddzielona przecinkiem a ca\u0142o\u015b\u0107 zamkni\u0119ta nawiasami klamrowymi. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{  \"name\":\"warto\u015b\u0107\",\n   \"lastName\":\"warto\u015b\u0107\",\n   \"badges\":&#91;\"warto\u015b\u0107\",\"warto\u015b\u0107\",\"warto\u015b\u0107\"]}<\/code><\/pre>\n\n\n\n<p>W powy\u017cszym przyk\u0142adzie jest przesy\u0142any jest obiekt kt\u00f3ry posiada 3 pola. Pierwsze dwa posiadaj\u0105 tylko warto\u015bci. Trzecie pole jest to lista. Dane w listach s\u0105 zamkni\u0119te nawiasami kwadratowymi i oddzielone od siebie przecinkami. Je\u017celi budujemy naszego JSON&#8217;a automatycznie i w nawiasach nic si\u0119 nie znajdzie wtedy strona odbieraj\u0105ca dane wie, \u017ce lista nie zawiera \u017cadnych element\u00f3w.<\/p>\n\n\n\n<p>Je\u017celi przestrzegamy jako nadawca wystawionego API to strona odbieraj\u0105ca mo\u017ce \u0142atwo je przetworzy\u0107. Powy\u017csze dane mog\u0105 by\u0107 sparsowane np. na taki obiekt:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class User {\n    String name;\n    String lastName;\n    List&lt;String&gt; badges;\n}<\/code><\/pre>\n\n\n\n<p>Dane kt\u00f3re s\u0105 przysy\u0142ane przy pomocy tego formatu s\u0105 proste w odczycie zar\u00f3wno przez urz\u0105dzenia jak i przez samego u\u017cytkownika.<\/p>\n\n\n\n<p>Je\u017celi chcemy zbudowa\u0107 bardziej z\u0142o\u017cony obiekt wtedy bierzemy powy\u017csze elementy jak klocki z kt\u00f3rych budujemy dowolne obiekty jak w przyk\u0142adzie poni\u017cej:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{  \"name\" : \"JustPlayer002\",\n   \"user\" : { \"name\":\"Andrzej\",\n              \"lastName\":\"Kowalski\",\n              \"badges\":&#91;\"Team Player\",\"Collector\"]\n             },\n   \"character\" : \"DWARF\",\n   \"board\" : \"MAIN\",\n   \"equipment\" : &#91;\"Hammer\",\"Shield\",\"Boots\"]\n}<\/code><\/pre>\n\n\n\n<p>Powy\u017csze dane mog\u0105 by\u0107 sparsowane np. na taki obiekt:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class Player {\n    String name;\n    User user;\n    Character character;\n    Board board;\n    List&lt;String> equipment;\n}\n\nGdzie \"Character\" i \"Board\" mog\u0105 by\u0107 prostymi Enum'ami, \"User\" jest klas\u0105 o kt\u00f3rej wspomnieli\u015bmy wcze\u015bniej a \"equipment\" jest prost\u0105 list\u0105. W ten spos\u00f3b s\u0105 budowane bardziej z\u0142o\u017cone i zagnie\u017cd\u017cone obiekty. Na szcz\u0119\u015bcie do ich serializacji i deserializacji na backendzie s\u0142u\u017c\u0105 odpowiednie narz\u0119dzia jak np. Jackson dzi\u0119ki czemu nie musimy robi\u0107 tego r\u0119cznie.<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Podsumowanie<\/h2>\n\n\n\n<p>Jason jest przyjaznym u\u017cytkownikowi formatem wymiany danych. Poza prostot\u0105 w odczycie przez cz\u0142owieka ma du\u017co mniej zb\u0119dnych znak\u00f3w ni\u017c XML. Oczywi\u015bcie poza JSON&#8217;em istniej wiele innych format\u00f3w do przesy\u0142ania danych wykorzystywanych przez np. przez <a href=\"https:\/\/iseebugs.pl\/index.php\/2024\/03\/19\/protokol-http\/\" data-type=\"post\" data-id=\"509\">\u017c\u0105dania HTTP<\/a>.<\/p>\n\n\n<style>.kb-image586_4694e0-8e .kb-image-has-overlay:after{opacity:0.3;}.kb-image586_4694e0-8e img.kb-img, .kb-image586_4694e0-8e .kb-img img{border-top-left-radius:45px;border-top-right-radius:45px;border-bottom-right-radius:45px;border-bottom-left-radius:45px;box-shadow:3px 3px 3px 3px #000000;}<\/style>\n<figure class=\"wp-block-kadence-image kb-image586_4694e0-8e size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"512\" height=\"512\" src=\"https:\/\/iseebugs.pl\/wp-content\/uploads\/2024\/05\/JSON.webp\" alt=\"JSON\" class=\"kb-img wp-image-590\" srcset=\"https:\/\/iseebugs.pl\/wp-content\/uploads\/2024\/05\/JSON.webp 512w, https:\/\/iseebugs.pl\/wp-content\/uploads\/2024\/05\/JSON-300x300.webp 300w, https:\/\/iseebugs.pl\/wp-content\/uploads\/2024\/05\/JSON-150x150.webp 150w\" sizes=\"(max-width: 512px) 100vw, 512px\" \/><figcaption>JSON<\/figcaption><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>JSON na przyk\u0142adach.<\/p>\n","protected":false},"author":1,"featured_media":590,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_kadence_starter_templates_imported_post":false,"footnotes":""},"categories":[31],"tags":[46],"_links":{"self":[{"href":"https:\/\/iseebugs.pl\/index.php\/wp-json\/wp\/v2\/posts\/586"}],"collection":[{"href":"https:\/\/iseebugs.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/iseebugs.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/iseebugs.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/iseebugs.pl\/index.php\/wp-json\/wp\/v2\/comments?post=586"}],"version-history":[{"count":4,"href":"https:\/\/iseebugs.pl\/index.php\/wp-json\/wp\/v2\/posts\/586\/revisions"}],"predecessor-version":[{"id":592,"href":"https:\/\/iseebugs.pl\/index.php\/wp-json\/wp\/v2\/posts\/586\/revisions\/592"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/iseebugs.pl\/index.php\/wp-json\/wp\/v2\/media\/590"}],"wp:attachment":[{"href":"https:\/\/iseebugs.pl\/index.php\/wp-json\/wp\/v2\/media?parent=586"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/iseebugs.pl\/index.php\/wp-json\/wp\/v2\/categories?post=586"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/iseebugs.pl\/index.php\/wp-json\/wp\/v2\/tags?post=586"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}