Format JSON: przykład i opis

20.02.2019

JSON to skrót od Skrypt Java Obiekt Notacja, który jest formatem, w którym tekst jest czytelny dla człowieka transfer danych składający się z par atrybut-wartość. Jest to najczęstszy format danych używany do asynchronicznej komunikacji między przeglądarką a serwerem, w dużej mierze zastępujący XML (przy użyciu AJAX).

format json

JSON to niezależny od języka format danych, który został wyprowadzony z JavaScript. Od 2017 r. Wiele języków programowania używało kodu do generowania i analizowania danych w nim samym. Nazwy plików JSON korzystają z rozszerzenia .json.

Historia stworzenia

Oryginalny format JSON został opracowany przez Douglasa Crockforda na początku zera, a następnie dwa konkurencyjne standardy (RFC 7159 i ECMA-404) zdefiniowały 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 istnieje standard RFC 7493, który definiuje ograniczony profil znany jako I-JSON (skrót od "Internet JSON"). Stara się przezwyciężyć niektóre problemy interakcji. Każdy taki dokument jest prawidłowym dokumentem JSON.

Konieczność stworzenia tego formatu wyrosła z potrzeby rzeczywistego protokołu komunikacji między serwerem a przeglądarką, zaimplementowanego w czasie rzeczywistym bez użycia wtyczek (takich jak aplety Flash lub Java).

Format json niż otwarty

Rozwój i zastosowanie

Jak już wspomniano, Douglas Crockford, twórca oprogramowania StateSoftware, po raz pierwszy zidentyfikował i spopularyzował format JSON. Następnie współzałożyciele zgodzili się stworzyć system wykorzystujący standardowe możliwości przeglądarki i udostępnili deweloperom warstwę abstrakcji do tworzenia aplikacji z ciągłym połączeniem dupleksu z serwerem sieciowym. Jednocześnie możliwe stało się otwarcie dwóch połączeń HTTP i przetworzenie ich do standardowego czasu przeglądarki, jeśli żadne dane nie zostały wymienione. 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ślili rodzaj licencji, w ramach której nowy program będzie dostępny. Obecnie format jest open source.

format json online

Praktyczne zastosowanie

Witryna JSON.org została uruchomiona w 2002 roku. W grudniu 2005 r. Yahoo! zaczął oferować niektóre usługi sieciowe w tym formacie. Google zaczęło używać kanałów JSON dla swojego protokołu internetowego GData dopiero w grudniu 2006 roku.

Pierwotnie format pliku JSON był przeznaczony dla podzbioru języka skryptowego JavaScript (w szczególności Standard ECMA-262 3rd Edition-December) i był z nim powszechnie używany. Jest to jednak format niezależny od języka danych. Kod do parsowania i generowania danych JSON jest dostępny w wielu językach programowania. Strona JSON wyświetla listę wszystkich bibliotek.

Chociaż internetowy format JSON był pierwotnie reklamowany i uważany za ścisły podzbiór kodu JavaScript i ECMAScript, okresowo zezwala na użycie niektórych znaków, które nie są chronione ciągami, które nie są poprawne w łańcuchach JavaScript i ECMAScript.

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

Rodzaje danych składnia i przykład

Główne typy danych JSON to:

  • Number: Podpisana liczba dziesiętna, która może zawierać część ułamkową i może wykorzystywać notację wykładniczą E, ale nie może zawierać cyfr (na przykład NaN). Format nie rozróżnia liczb całkowitych od liczb zmiennoprzecinkowych. JavaScript używa formatu zmiennoprzecinkowego podwójnej precyzji dla wszystkich swoich wartości numerycznych, ale inne języki, które implementują JSON, mogą je kodować w różny sposób.

Przykład formatu json

  • String: sekwencja zerowych lub dużych znaków Unicode. Ciągi są oddzielone podwójnymi cudzysłowami i wspierają składnię z odwrotnym ukośnikiem.
  • Literały: dowolna z wartości prawda lub fałsz.
  • Array: uporządkowana lista zero lub więcej wartości, z których każda może być dowolnego typu. Tablice używają nawiasów kwadratowych z przecinkami.
  • Obiekt: Nieuporządkowany zestaw par nazwa / wartość, w którym nazwy (zwane również kluczami) są ciągami. Ponieważ obiekty są przeznaczone do reprezentowania tablic asocjacyjnych, zaleca się (choć niekoniecznie), aby każdy klucz był unikalny w obrębie niego. Obiekty są oddzielone nawiasami klamrowymi i przecinają każdą parę za pomocą przecinków, natomiast wewnątrz każdej z nich dwukropek oddziela klucz lub nazwę od jej wartości.
  • Null: Wartość pusta za pomocą słowa null.

Ograniczone spacje są dozwolone i mogą być umieszczone wokół lub między elementami składni (wartości i znaki interpunkcyjne, ale nie w obrębie wartości ciągu). W tym celu brane są pod uwagę tylko cztery znaki specjalne. spacje: przestrzeń, zakładka pozioma, linia i ukośnik. W szczególności etykieta kolejności bajtów nie powinna być generowana przez odpowiednią implementację (chociaż może być przyjęta podczas analizowania JSON). Żądanie w formacie JSON nie zapewnia składni komentarzy.

Wczesne wersje (na przykład określone w specyfikacji RFC 4627) wymagały, aby prawidłowy dokument składał się tylko z obiektu lub typu tablicy, który mógł zawierać inne typy w nim zawarte. Taki format JSON, którego przykład można znaleźć na przestarzałych stronach internetowych, nie jest obecnie używany.

prześlij w formacie json

Problemy z przenośnością danych

Chociaż Douglas Crockford pierwotnie twierdził, że JSON jest ścisłym podzbiorem JavaScript, to jego specyfikacja pozwala na tworzenie dokumentów, których nie można odczytać w JavaScript. W szczególności JSON pozwala, aby wartości ciągów Unicode U + 2028 SEPARATOR LINII i U + 2029 PARAGRAPH SEPARATOR pojawiały się nieekranowane na cytowanych liniach, ale JavaScript tego nie robi. Wynika to z faktu, że JSON zabrania tylko "znaków kontrolnych". Aby uzyskać maksymalną zgodność, znaki te powinny być opatrzone ukośnikiem odwrotnym. Ta subtelność jest ważna przy tworzeniu JSONP.

Format JSON: jak otworzyć?

Dokumenty JSON mogą być kodowane w UTF-8, UTF-16 lub UTF-32, domyślne kodowanie to UTF-8. Te standardy obsługują pełny zestaw znaków Unicode, w tym znaki spoza głównej płaszczyzny wielojęzycznej (od U ​​+ 10 000 do U + 10FFFF). Jednakże, jeśli są one zmienione, to te znaki muszą być napisane przy użyciu par zastępczych UTF-16 - szczegółów brakujących niektórym analizatorom w formacie JSON. Jak otworzyć i jak będzie czytany taki plik?

Liczby w tym formacie są agnostyczne w odniesieniu do ich reprezentacji w językach programowania. Nie ma różnicy między liczbą całkowitą a wartością zmiennoprzecinkową: niektóre implementacje mogą uwzględniać 42, 42.0 i 4.2E + 1 jako taką samą liczbę, podczas gdy inne nie. 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 mówi nic o przetwarzaniu podpisanych zer, niezależnie od tego, czy 0.0 różni się od -0.0. Większość implementacji wykorzystujących standard zmiennoprzecinkowy IEEE 754, w tym JavaScript, zachowuje podpisane zera, ale nie wszystkie implementacje JSON mogą to zrobić.

Żądaj w formacie json

Użyj w javascript

Ponieważ format JSON został wyprowadzony z JavaScript, a jego składnia jest (najczęściej) podzbiorem języka, można użyć funkcji JavaScripteval do analizy danych JSON. Ze względu na problem z parsowaniem terminatorów napisów Unicode omówionych w poprzedniej sekcji, funkcja eval musi wykonać ich wymianę.

Jest to niebezpieczne, jeśli ciąg nie jest poprawnie sprawdzany. Zamiast tego, aby odczytać i zapisać JSON, użyj biblioteki analizatora JSON lub jej obsługi JavaScript.

Prawidłowo zaimplementowany analizator składni akceptuje tylko poprawny format JSON, którego opis jest obecny w systemie, uniemożliwiając niezamierzone wykonanie potencjalnie złośliwego kodu.

Od 2010 roku przeglądarki internetowe, takie jak Firefox i Internet Explorer, umożliwiają obsługę analiz i przesyłanie do formatu JSON.

Nieobsługiwane rodzime typy danych

Składnia JavaScript definiuje kilka rodzimych typów danych, które nie są zawarte w standardzie JSON: Map, Set, Date, Error, Regular Expression, Function i kilka innych. Te typy danych JavaScript muszą być reprezentowane przez niektóre inne formaty, przy czym oba programy zgadzają się na rodzaj konwersji między typami. Obecnie istnieją pewne standardy defacto, na przykład konwertowanie daty na ciąg znaków, ale żadna z nich nie jest ogólnie akceptowana. Inne języki mogą mieć inny zestaw natywnych typów, które muszą być serializowane ostrożnie, aby poradzić sobie z tego typu konwersją.

Opis formatu json

Schemat JSON

Schemat służy do definiowania struktury danych JSON do sprawdzania poprawności, dokumentowania i zarządzania interakcją. Zapewnia rodzaj umowy dla danych wymaganych przez aplikację i sposób jej zmiany.

Schemat opiera się na pojęciach ze schematu XML (XSD), ale jest natywny. Podobnie jak w 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 inny poziom zgodności. Nie ma standardowego rozszerzenia pliku, ale niektórzy eksperci sugerują 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, oczekuje lub rozpoznaje typ MIME, którego zawartość wygląda jak "text / json" lub "text / javascript". Znane przykłady to Google Search API, Yahoo !, Flickr, Facebook API, DojoToolkit 0.4, i tak dalej.

JSON-RPC

JSON-RPC jest protokołem zdalnego wywoływania procedur (RPC) opartym na JSON, utworzonym jako zamiennik XML-RPC lub SOAP. Jest to prosty protokół, który definiuje tylko kilka typów danych i poleceń. Pozwala to systemowi na wysyłanie powiadomień (informacji do serwera, który nie wymaga odpowiedzi) i kilku wywołań na serwer, na które można udzielić odpowiedzi poza kolejnością.

AJAJ

Asynchroniczny JavaScript i JSON (lub AJAJ) należą do tej samej dynamicznej metodyki strony internetowej co Ajax, ale zamiast XML dane JSON są głównym formatem. AJAJ to technologia tworzenia stron internetowych, która umożliwia stronie internetowej żądanie nowych danych po załadowaniu 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 w polu wyszukiwania, kod klienta wysyła następnie do serwera, który natychmiast odpowiada z rozwijanej listy odpowiednich elementów bazy danych.

Kwestie bezpieczeństwa

Tekst JSON jest zdefiniowany jako obiekt serializacji danych. Jednak jego konstrukcja, jako luźno zdefiniowany podzbiór języka skryptowego JavaScript, stwarza kilka problemów związanych z bezpieczeństwem. Skupiają się na użyciu interpretera Javascript, aby dynamicznie uruchamiać tekst JSON jako wbudowany JavaScript. To naraża program na błędne lub złośliwe skrypty. Jest to poważny problem podczas pracy z danymi pobranymi z Internetu.

Ta prosta i popularna, ale ryzykowna metoda wykorzystuje kompatybilność z funkcją JavaScripteval.

Niektórzy twórcy błędnie uważają, że tekst JSON jest również syntaktycznie podobny do kodu JavaScript, chociaż jest to tylko częściowo prawda. Dlatego uważa się, że prostym sposobem dla programu JavaScript do analizy danych w tym formacie jest użycie wbudowanej funkcji JavaScripteval, która została zaprojektowana do oceny wyrażeń "JavaScript". Zamiast używać określonego parsera, sam interpreter jest używany do wykonywania danych JSON, tworząc naturalne obiekty JavaScript. Ta metoda jest jednak ryzykowna, jeśli istnieje prawdopodobieństwo, że dane JSON mogą zawierać dowolny kod JavaScript, który następnie zostanie wykonany w ten sam sposób. Dopóki nie zostaną podjęte pierwsze kroki w celu sprawdzenia poprawności danych, metoda eval jest podatna na luki w zabezpieczeniach, gdy dane i całe środowisko JavaScript nie znajduje się pod kontrolą jednego zaufanego źródła.

Na przykład, jeśli dane nie są zweryfikowane, podlegają one złośliwemu atakowi kodu JavaScript. Takie naruszenia mogą również stwarzać ryzyko kradzieży danych, oszustw związanych z uwierzytelnianiem i innych potencjalnych przypadków niewłaściwego wykorzystania 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 dokładnie JSON, a nie JavaScript. Pierwotnie planowano włączenie go do czwartej edycji standardu ECMAScript, ale tak się nie stało. Został po raz pierwszy dodany do wersji 5 i jest teraz obsługiwany przez główne przeglądarki.