JavaScript Object Notation, JSON (wym. [ˈeɪsən]) – lekki format wymiany danych komputerowych. JSON jest formatem tekstowym, bazującym na podzbiorze języka JavaScript. Typ MIME dla formatu JSON to application/json[1]. Format został opisany w dokumentach RFC 4627 ↓, ISO/IEC 21778:2017[2] oraz ECMA-404[3].

Pomimo nazwy, JSON jest formatem niezależnym od konkretnego języka. Wiele języków programowania obsługuje ten format danych przez dodatkowe pakiety bądź biblioteki. Wśród nich są ActionScript, C, C++, C#, ColdFusion, E, Java, JavaScript, ML, Objective CAML, Perl, PHP, Python, R, REBOL oraz Ruby.

Składnia

edytuj

Komunikat JSON jest literałem obiektu języka Javascript, który w tym języku jest tablicą asocjacyjną. Wszystkie dane są zmiennymi (nie stanowią kodu wykonywalnego), a nazwy składników (właściwości) obiektów są otoczone cudzysłowami. Wartości mogą być typu string (napis otoczony cudzysłowem), number (liczba typu double), stanowić jedną ze stałych: false null true, być tablicą złożoną z takich elementów lub obiektem. Obiekty i tablice mogą być dowolnie zagnieżdżane. Cały komunikat jest kodowany w unikodzie i domyślnie jest to UTF-8.

Przykład

edytuj
{
  "menu": {
    "id": "file",
    "value": "File",
    "popup": {
      "menuitem": [
        {"value": "New", "onclick": "CreateNewDoc()"},
        {"value": "Open", "onclick": "OpenDoc()"},
        {"value": "Close", "onclick": "CloseDoc()"}
      ]
    }
  }
}

Powyższe dane zapisane w YAML-u:

menu:
  id: file
  popup:
    menuitem:
    - onclick: CreateNewDoc()
      value: New
    - onclick: OpenDoc()
      value: Open
    - onclick: CloseDoc()
      value: Close
  value: File

Powyższe dane zapisane w XML-u:

 <menu id="file" value="File">
   <popup>
     <menuitem value="New" onclick="CreateNewDoc()" />
     <menuitem value="Open" onclick="OpenDoc()" />
     <menuitem value="Close" onclick="CloseDoc()" />
   </popup>
 </menu>

Wykorzystanie

edytuj

JSON jest jednym z nieformalnych sposobów przekazywania danych do aplikacji opartych na AJAX. W typowych przypadkach dane w formacie JSON są pobierane z serwera jako tekst przy wykorzystaniu obiektu XMLHttpRequest języka JavaScript, a następnie przekształcane w obiekt. Tekst powinien być kodowany za pomocą UTF-8, który jest w JSON domyślny.

 var http_request = new XMLHttpRequest();
 var url = "http://serwer.pl/to/jest/tylko/test"; // adres z danymi w formacie JSON

 // pobierz dane w formacie JSON z serwera
 http_request.onreadystatechange = handle_json;
 http_request.open("GET", url);
 http_request.send(null);

 function handle_json() {
        if (http_request.readyState == 4) {
                if (http_request.status == 200) {
                        var json_data = http_request.responseText; // pobranie tekstu
                        var the_object = JSON.parse(json_data); // zamiana tekstu na obiekt JSON
                } else {
                        alert('Wystąpił problem z wybranym adresem URL.');
                }
                http_request = null;
        }
 }

Powyższy kod jest znacząco uproszczony. Wykorzystany w tym przykładzie obiekt XMLHttpRequest nie jest dostępny we wszystkich przeglądarkach. W normalnych warunkach używa się dodatkowych funkcji lub metod przejściowych.

Porównanie z XML-em i innymi językami znaczników

edytuj

Dostęp do danych w formacie JSON jest bardziej naturalny z poziomu języka JavaScript niż dostęp do tych samych danych w formacie XML, ponieważ JSON stanowi składniowy podzbiór języka JavaScript. Wbrew podobieństwu w nazwie, nie jest już jednak tak naturalny dla Javy i wymaga stosowania specjalnych bibliotek.

XML był początkowo jedynym językiem w usługach sieciowych, a więc dominującym przy sformalizowanej wymianie danych. Jednak w nowszych wersjach standardów dopuszczana jest także wymiana danych za pomocą JSON-a (np. w REST).

XML może być łatwiejszy przy czytaniu dowolnego fragmentu dokumentu – ze względu na nazwę znacznika widoczną także w końcowym znaczniku. Jednak z tego samego względu XML w praktyce zajmuje znacząco więcej miejsca niż analogiczny obiekt przesyłany za pomocą formatu JSON. Ilość przesyłanych danych jest z kolei szczególnie istotna w związku z dużą popularnością urządzeń mobilnych (w szczególności smartfonów).

YAML jest również językiem serializacji danych i stanowi nadzbiór języka JSON. JSON jest od niego jednak łatwiejszy do analizowania składni[4].

JSON.parse i bezpieczeństwo danych w przeglądarkach

edytuj

Analiza składniowa (ang. parsing) danych w formacie JSON w JavaScript jest możliwe poprzez funkcję JSON.parse() lub eval(). Bezpieczniejsza jest jednak funkcja JSON.parse(). Zagrożenie polega na tym, że funkcja eval() powoduje wykonanie dowolnego kodu, czyli także takiego, który może być dowolnym poleceniem JavaScript, także złośliwym. Funkcja JSON.parse() nie jest na to wrażliwa, ponieważ sprawdza, czy analizowany ciąg znaków jest prawidłowy i tylko wtedy przekształca go na obiekt danych.

Należy zwrócić przy tym uwagę, że funkcja JSON.parse() wprowadzona została dopiero wraz z piątą wersją standardu ECMAScript i jest niedostępna w niektórych, starszych przeglądarkach internetowych[5]. Dla takich przeglądarek jak np. Internet Explorer 7 oraz 6 można jednak użyć zastępników[6].

Zobacz też

edytuj

Przypisy

edytuj
  1. The application/json Media Type for JavaScript Object Notation (JSON). datatracker.ietf.org, 2006-06. [dostęp 2022-06-02]. (ang.).
  2. ISO - ISO/IEC 21778:2017 - Information technology — The JSON data interchange syntax. iso.org, 2017-11. [dostęp 2022-06-02]. (ang.).
  3. ECMA-404. ecma-international.org, 2017-12. [dostęp 2022-06-02]. (ang.).
  4. Bob Ippolito: What happened to YAML?. 2005-07-19. (ang.).
  5. Can I use Json parsing. Can I use. (ang.).
  6. Douglas Crockford: JSON in JavaScript. (ang.).

Linki zewnętrzne

edytuj
  • Introducing JSON. (ang.).
  • JSON-RPC. [dostęp 2005-11-23]. [zarchiwizowane z tego adresu (2014-12-29)]. (ang.).
  • D. Crockford, The application/json Media Type for JavaScript Object Notation (JSON), RFC 4627, IETF, lipiec 2006, DOI10.17487/RFC4627, ISSN 2070-1721, OCLC 943595667 (ang.).
  • JSON JavaScript Object Notation. Yahoo! groups. (ang.).
  • Narzędzie do naprawy JSON
  • AJAX without XML. Software Secret Weapons. [dostęp 2016-05-04]. [zarchiwizowane z tego adresu (2016-03-26)]. (ang.).
  • JSON Formatter. (ang.).

📚 Artikel Terkait di Wikipedia

Parsowie

się więc gudźarati lub coraz częściej angielskim. Najbardziej znanymi Parsami byli Freddie Mercury (właściwie: Farrokh Bulsara) i Jamsetji Tata, założyciel

Sean Bean

ogniu: Początki (2019) jako Douglas Bennett Possessor (2020) jako John Parse Sekret wilczej gromady (2020) jako Bill Goodfellowe (głos) Snowpiercer (2020-2024)

Freddie Mercury

brytyjskiej. Jego rodzice, brytyjski urzędnik Bomi oraz Jer Bulsara, byli Parsami z Gudźaratu i wyznawcami zaratusztrianizmu. Z początku mieszkał w Zanzibarze

Międzynarodowy numer rachunku bankowego

int modulo = 0; foreach (char znak in nr2) modulo = (10 * modulo + int.Parse(znak.ToString())) % 97; modulo = 98 - modulo; // zwrócenie w postaci czytelnej

Elasticsearch

[online], www.elastic.co [dostęp 2020-02-02]  (ang.). Logstash: Collect, Parse, Transform Logs [online], www.elastic.co [dostęp 2020-02-02]  (ang.). Beats:

C Sharp

{ Console.Write("Iluścienną kostką chcesz grać? "); try { kostka = int.Parse(Console.ReadLine()); } catch { Console.WriteLine("Podano nieprawidłowe dane

Parsauni Matha

Parsauni Matha – gaun wikas samiti w środkowej części Nepalu w strefie Narajani w dystrykcie Parsa. Według nepalskiego spisu powszechnego z 2001 roku liczył

Parsauni

Parsauni (nep. पसौरनी) – gaun wikas samiti w zachodniej części Nepalu w strefie Lumbini w dystrykcie Nawalparasi. Według nepalskiego spisu powszechnego