Format JSON: Przykład i opis: SYL.ru

JSON jest skrótem od Java Script Object Notation, który jest formatem, który używa tekstu odczytanego przez człowieka w celu przesyłania danych składających się z par wartości atrybutów. Jest to najpopularniejszy format danych używany do asynchronicznej komunikacji między przeglądarką a serwerem, w dużej mierze zastępując XML (AJAX).

JSON jest niezależnym językowo formatem danych uzyskanym z javascript. Od 2017 r. Wiele języków programowania używa kodu do generowania i analizowania danych tylko w nim. Nazwy plików JSON korzystają z rozszerzenia .json.

Historia

Pierwotnie opracowany w formacie JSON Douglas Krokford zera na początku, a później dwa konkurujące ze sobą standardy (RFC 7159 i ECMA-404) zidentyfikowano go w 2013 roku. Standard ECMA opisuje tylko poprawną składnię, podczas gdy RFC obejmuje niektóre z podstaw bezpieczeństwa i interoperacyjności. Ponadto, nie są standardem RFC 7493, który określa ograniczony profil, znany jako I-JSON (skrót «» Internet JSON). Stara się przezwyciężyć niektóre interakcje. Każdy taki dokument jest prawidłowym dokumentem JSON. Potrzeba stworzenia tego formatu wyrosła z potrzeby rzeczywistym protokół komunikacyjny między serwerem a przeglądarką, prowadzone w czasie rzeczywistym bez użycia wtyczek (takich jak Flash lub Java-apletów).

, rozwój i zastosowanie

Jak już wspomniano, Douglas Krokford jest twórca StateSoftware, najpierw opisane i popularyzacji JSON. Następnie współzałożyciele zgodzili się stworzyć system wykorzystujący standardowe możliwości przeglądarki,i zapewniał programistom poziom abstrakcji do tworzenia aplikacji z ciągłą dwustronną łącznością z serwerem sieciowym. W tym przypadku można było pozostawić otwarte dwa połączenia HTTP i obsłużyć je do standardowego czasu przeglądarki, jeśli wymiana danych nie została przeprowadzona. Współzałożyciele odbyli dyskusję przy okrągłym stole i głosowali nad nazwaniem formatu danych JSML lub JSON, a także określeniem typu licencji, dla której nowy projekt będzie dostępny. Format jest obecnie open source.

Zastosowanie praktyczne

Strona internetowa JSON.org została uruchomiona w 2002 r. W grudniu 2005 r. Yahoo! zaczął oferować niektóre usługi sieciowe w tym formacie. Google zaczął stosować kanały JSON do swojego protokołu internetowego GData dopiero w grudniu 2006 roku. Pierwotnie format pliku JSON był przeznaczony dla podzbioru języka skryptów javascript (w szczególności Standard ECMA-262 3rd Edition-December) i był powszechnie używany z nim. Jednak nie zależy to od danych w formacie językowym. Kod do parsowania i generowania danych JSON jest dostępny w wielu językach programowania. Strona JSON wyświetla listę wszystkich bibliotek. Mimo że format JSON pierwotnie reklamowane online i uznano ścisłe podzbiorem JavaScript i ECMAScript, że od czasu do czasu pozwala niektóre znaki nie są sprawdzane w liniach, które są niedopuszczalne w rzędach JavaScript i ECMAScript.

Sam JSON stał się międzynarodowym standardem ECMA w 2013 r. Jako norma ECMA-404, która została wykorzystana w tym samym roku, co RFC 7158 jako odniesienie. W 2014 roku RFC 7159 stał się głównym odniesieniem do korzystania z JSON w Internecie (na przykład MIMEapplication /json).

Rodzaje danych, składnia i przykład

Główne typy danych JSON to:
  • Liczba: liczba dziesiętna z charakterem, który może zawierać część ułamkową i może używać wykładnika E, ale może nie zawierać liczb (na przykład NaN). Format nie rozróżnia celów i liczb zmiennoprzecinkowych. javascript używa podwójnego formatu zmiennoprzecinkowego dla wszystkich swoich wartości liczbowych, ale inne języki zaimplementowane w JSON mogą je kodować w różny sposób.
  • Wiersz: sekwencja zerowych lub dużych znaków Unicode. Linie są oddzielone znakami podwójnymi i obsługują składnię odwrotnym ukośnikiem.
  • Literały: dowolna z wartości prawda lub fałsz.
  • Array: uporządkowana lista z zerową lub większą liczbą wartości, z których każda może być dowolnego rodzaju. Tablice używają nawiasów kwadratowych z przecinkami.
  • Obiekt: nieuporządkowany zestaw par nazwa /wartość, gdzie nazwy (zwane również kluczami) są wierszami. Ponieważ obiekty są przeznaczone do reprezentowania tablic asocjacyjnych, zaleca się (choć niekoniecznie), aby każdy klucz był unikalny w obrębie niego. Obiekty są podzielone za pomocą nawiasów klamrowych i przecinają każdą parę za pomocą przecinków, natomiast wewnątrz każdego dwukropek usuwa klucz lub nazwę z jego wartości.
  • Null: Pusta wartość, używając słowa null.
  • Ograniczone spacje są dozwolone i mogą być wyświetlane wokół lub pomiędzy elementami składni (znaczenie i interpunkcja, ale nie w obrębie wartości ciągu). W tym celu tylko cztery znaki specjalnesą traktowane jako spacje: spacja, tabulacja pozioma, tłumaczenie linii i pochylenie. W szczególności etykieta kolejności bajtów nie powinna być generowana przez odpowiednią implementację (chociaż może być zaakceptowana przez analizę JSON). Zapytanie JSON nie zapewnia składni komentarzy. Wczesne wersje (takie jak te określone w RFC 4627) wymagały, aby prawidłowy dokument składał się tylko z obiektu lub typu tablicy, która mogła zawierać inne typy wewnątrz nich. Ten format JSON, którego przykład można znaleźć na przestarzałych stronach internetowych, jest obecnie nieużywany.

    Problemy z transferem danych

    Chociaż Douglas Krokford początkowo twierdził, że JSON jest podzbiorem ścisłe javascript, jego specyfikacja rzeczywiście pozwala na tworzenie dokumentów w czytelnej javascript. W szczególności JSON pozwala ciąg znaków U + 2028 Unicode linię oddzielającą U + 2029 i separatora akapitu wyglądał neэkranyrovannыmy cytowane w rzędach i Javascript - nie. Wynika to z faktu, że JSON zabrania tylko "znaków kontrolnych". Aby zapewnić maksymalną zgodność, te znaki muszą być wyświetlane z odwrotnym ukośnikiem. Ta subtelność jest ważna przy tworzeniu JSONP.

    Format JSON: co otworzyć?

    Dokumenty JSON mogą być kodowane w kodowaniu UTF-8 lub UTF-32 domyślnym kodowaniu - UTF-8. Standardy te obsługuje pełny zestaw znaków Unicode „, w tym znaków spoza podstawowej płaszczyźnie wielojęzycznym (od U ​​+ 10000 do U + 10FFFF) Ale jeśli ekranowane, znaki te muszą być napisane przy użyciu zastępczych Wyniki Pary UTF-16. - szczegóły, które pominięte niektóre Analizatory formatu JSON: co otworzyć i jak to będzieprzeczytać ten plik? Liczby w tym formacie są agnostyczne w stosunku do ich prezentacji w językach programowania. Nie ma różnicy między liczbą całkowitą a zmiennoprzecinkową: niektóre implementacje mogą traktować 42420 i 4.2 E + 1 jako taką samą liczbę, podczas gdy inne mogą tego nie robić. Ponadto nie ma żadnych wymagań dotyczących problemów, takich jak przepełnienie, niewystarczalność, utrata dokładności lub zaokrąglenie. Ponadto format JSON nie ma nic do powiedzenia na temat przetwarzania podpisanych zer, niezależnie od tego, czy jest 0.0, czy też różni się od -0,0. Większość implementacji, które używają standardu IEEE 754 zmiennoprzecinkowego, w tym javascript, zachowuje zera, ale nie wszystkie implementacje JSON mogą to zrobić.

    Używanie javascript

    Ponieważ format JSON został wyprowadzony z javascript a jego składnia (w zasadzie) jest podzbiorem języka, javascripteval może być używany do analizy danych JSON. Ze względu na problemy z podziałami znaków Unicode omówione w poprzedniej sekcji, funkcja eval musi wykonać wymianę. Jest to niebezpieczne, jeśli ciąg nie został poprawnie zweryfikowany. Zamiast tego należy użyć biblioteki analizatora JSON lub jej obsługi javascript do odczytu i zapisu JSON. Prawidłowo zaimplementowany analizator składni akceptuje tylko prawidłowy format JSON, opisany w systemie, uniemożliwiający niezamierzone wykonanie potencjalnie szkodliwego kodu. Od 2010 roku takie przeglądarki obsługują przeglądarki Firefox i Internet Explorer w celu analizy i rozładowania w formacie JSON.

    Nieobsługiwane własne typy danych

    Składnia javascript definiuje kilka własnych typów danych, które nie są zawarte wStandard JSON: mapa, instalacja, data, błąd, wyrażenie regularne, funkcja i kilka innych. Te typy danych javascript muszą być reprezentowane przez niektóre inne formaty, przy czym oba programy ustalają sposób konwersji między typami. Obecnie istnieją pewne standardy defacto, na przykład przekształcanie daty w ciąg znaków, ale żadna z nich nie jest powszechnie akceptowana. Inne języki mogą mieć inny zestaw własnych typów, które muszą być serializowane ostrożnie, aby poradzić sobie z tym typem konwersji.

    Schemat JSON

    Schemat służy do określenia struktury danych JSON do weryfikacji, dokumentacji i zarządzania interakcjami. Zapewnia rodzaj umowy na dane wymagane przez aplikację i sposób jej modyfikacji. Schemat opiera się na pojęciach ze schematu XML (XSD), ale jest jego własnym. Podobnie jak w przypadku XSD, te same narzędzia do szeregowania /deserializacji są używane zarówno w schemacie, jak iw danych. Schema to projekt online, który jest obecnie w wersji 5 (wydany 13 października 2016 r.). Dostępnych jest kilka walidatorów dla różnych języków programowania, z których każdy ma różne poziomy zgodności. Nie ma standardowych rozszerzeń plików, ale niektórzy eksperci proponują zatwierdzenie pliku .schema.json.

    Typ MIME

    Oficjalny typ MIME dla tekstu JSON to "application /json". Pomimo faktu, że większość współczesnych implementacji przyjęła oficjalny typ MIME, wiele aplikacji nadal obsługuje starsze wersje innych typów MIME. Wielu dostawców usług, przeglądarek, serwerów, aplikacji internetowych, bibliotek, frameworków i interfejsów API używa, czekaj lub rozpoznaje typ MIME, którego zawartość wygląda"Tekst /json" lub "tekst /javascript". Znane przykłady to Google Search API, Yahoo !, Flickr, Facebook API, DojoToolkit 0.4 i inne.

    JSON-RPC

    JSON-RPC jest protokołem zdalnego wywoływania procedur (RPC) opartym na JSON, utworzonym jako substytut XML-RPC lub SOAP. Jest to prosty protokół, który definiuje tylko kilka typów danych i poleceń. Pozwala to systemowi wysyłać wiadomości (informacje do serwera, które nie wymagają odpowiedzi) i kilka połączeń z serwerem, na które można odpowiedzieć w dowolnej kolejności.

    AJAJ

    Asynchroniczne javascript i JSON (lub AJAJ) odwołują się do tej samej dynamicznej metodyki strony internetowej co Ajax, ale zamiast XML, niezbędny jest dokładny format danych JSON. AJAJ to technologia tworzenia stron internetowych, która umożliwia stronie internetowej żądanie nowych danych po pobraniu do przeglądarki. Zwykle wyświetla je z serwera w odpowiedzi na działania użytkownika na tej stronie. Na przykład, co użytkownik wprowadza do pola wyszukiwania, kod klienta wysyła następnie do serwera, który natychmiast odpowiada liście rozwijanej odpowiednich elementów bazy danych.

    Kwestie bezpieczeństwa

    Tekst w formacie JSON jest zdefiniowany jako obiekt serializacji danych. Jednak jego konstrukcja, jako niezrozumiały podzbiór języka skryptów javascript, stwarza kilka problemów związanych z bezpieczeństwem. Skupiają się na użyciu interpretera Javascript, aby dynamicznie wykonywać tekst JSON jako wbudowany javascript. To przesyła program fałszywe lub złośliwe skrypty. Jest to poważny problem podczas pracy z danymi pobieranymi z Internetu. Ta prosta i popularna, ale ryzykowna metoda wykorzystuje kompatybilność funkcjonalnąjavascripteval Niektórzy twórcy błędnie uważają, że tekst JSON jest również podobny do składni javascript, chociaż jest to tylko częściowo prawda. Dlatego uważa się, że w łatwy sposób analizować JavaScript format danych, program - korzystanie z wbudowanego javascripteval, który został zaprojektowany w celu oceny wyrażenia „Javascript”. Zamiast używania konkretnego samego tłumacza parsera, więc służy do wykonywania JSON danych, tworząc javascript naturalnych obiektów. Jednak metoda ta jest ryzykowna, jeżeli jest prawdopodobne, że te JSON może zawierać dowolny kod „JavaScript”, który zostanie wykonany, jak również. Jeśli początkowo nie podjęte kroki w celu weryfikacji danych, metoda eval skłonny do luk w zabezpieczeniach gdy dane javascript i wszystko środa nie są kontrolowane przez jednego zaufanego źródła. Na przykład, jeśli dane nie są zweryfikowane, są atakowane przez złośliwy kod javascript. Takie naruszenia mogą również stwarzać ryzyko kradzieży danych, fałszywego uwierzytelnienia i innych potencjalnych nadużyć danych i zasobów. Tak więc nowa funkcja JSON.parse została opracowana jako bezpieczniejsza alternatywa dla eval. Został specjalnie zaprojektowany do przetwarzania danych, a mianowicie JSON, a nie javascript. Początkowo planowano jego włączenie do czwartej edycji standardu ECMAScript, ale tak się nie stało. Został po raz pierwszy dodany do piątej wersji i jest teraz obsługiwany przez główne przeglądarki.

    Powiązane publikacje