JSON/pl

From Free Pascal wiki

English (en) suomi (fi) 日本語 (ja) 한국어 (ko) polski (pl) русский (ru) 中文(中国大陆)‎ (zh_CN)

Przegląd

JSON (JavaScript Object Notation) jest to znormalizowany format wymiany danych zapisanych przy użyciu zwykłego tekstu. Jak sama nazwa wskazuje, jest on oparty na podstawie języka programowania JavaScript; jest jednak całkowicie niezależny od języka. Oprócz tego, że ludzie mogą łatwo czytać i pisać pliki JSON, to maszyny również są w stanie parsować i generować te pliki.

W porównaniu z XML, jest bardziej czytelny dla człowieka.

Obiekt JSON

Obiekt JSON to nic innego jak zbiór oddzielonych przecinkami par nazwa/wartość (często nazywanych elementami) ujętych w nawiasy klamrowe:

{"name1":value1, "name2":value2 ...}

Aby ułatwić ludziom czytanie i wizualizację JSON, pary nazwa/wartość są często wymienione pionowo:

{
	"name1": value1,
	"name2": value2
}

Nazwa jest łańcuchem znaków ujętych w podwójnych cudzysłowach, a wartością może być jedna z następujących opcji:

  • prosty ciąg, wartość liczbowa, logiczna lub null (ciągi są ujęte w podwójne cudzysłowy):
    {"id":1, "name":"John Doe", "married":false}
  • tablica; która jest zbiorem wartości oddzielonych przecinkami w nawiasach kwadratowych:
    {"primeNumbers":[2, 3, 5, 7, 11, 13, 17], "oddNumbers":[1,3,5,7]}
  • obiekt; który jest zbiorem par nazwa/wartość zawartych w nawiasach klamrowych:
    {"address":{"street":"145 Koinange Street", "City":"Nairobi", "Country":"Kenya"}}

Obiekty JSON można zagnieżdżać dowolnie, aby tworzyć jeszcze bardziej złożone obiekty:

{"user":
	{	"userid": 1900,
		"username": "jsmith",
		"password": "secret",
		"groups": [ "admins", "users", "maintainers"]
	}
}

Sprawdź ten link, aby wyodrębnić informacje, gdy masz kilku użytkowników.

Prawidłowy format JSON

Istnieje kilka zasad i wytycznych, które definiują składnię JSON (patrz RFC 4627):

  • Obiekty JSON są otoczone nawiasami klamrowymi otwierającymi i zamykającymi { }. Pusty obiekt może być reprezentowany przez { }
  • Tablice są zamknięte w nawiasy kwadratowe otwierające i zamykające [ ]. Pusta tablica może być reprezentowana przez [ ]
  • Pojedynczy element obiektu JSON reprezentowany jest przez parę klucz-wartość
  • Klucz elementu powinien być zawarty w podwójnych cudzysłowach
  • Każdy element POWINIEN mieć unikalny klucz w strukturze obiektu
  • Wartość elementu musi być zawarta w podwójnych cudzysłowach, jeśli jest to ciąg znaków
  • Wartości Boolean są reprezentowane za pomocą literałów true lub false zapisane małymi literami
  • Wartości liczbowe są reprezentowane przy użyciu formatu zmiennoprzecinkowego podwójnej precyzji; Obsługiwany jest także zapis naukowy; Liczby nie powinny mieć wiodących zer
  • Znaki „specjalne” w ciągu muszą być poprzedzone znakiem odwrotnego ukośnika
  • Wartości Null są reprezentowane przez literał null zapisany małymi literami
  • Inne typy obiektów, takie jak daty, nie są natywnie obsługiwane i powinny zostać przekonwertowane na ciągi; do zarządzania przez analizator składni/klienta
  • Po każdym elemencie obiektu lub każdej wartości tablicy musi znajdować się przecinek, jeśli nie jest to ostatni element
  • Typowym rozszerzeniem plików JSON jest .json
  • Typ MIME dla plików JSON to application/json

Implementacja

Implementacja JSON nie jest bardzo rygorystyczna, a aplikacja kliencka i/lub analizator składni mają dużo swobody w egzekwowaniu wytycznych. Ale, jak zwykle podczas pisania kodu

  • bądź tolerancyjny w tym, co akceptujesz
  • bądź rygorystyczny (przestrzegając standardu) w tym co wysyłasz.

Istnieją dwie główne implementacje JSON:

Oficjalna składnia specyfikacji JSON

Ta implementacja jest ściśle zgodna z wytycznymi dokumentu RFC 8259 i nie pozwala na odstępstwa od specyfikacji.

Składnia JavaScript

Ta implementacja wynika z implementacji języka programowania JavaScript i jako taka pozwala na kilka odchyleń od oficjalnej specyfikacji. Na przykład:

  1. dopuszcza klucze bez cudzysłowu, np. {name: "John Doe" }
  2. dopuszcza pojedyncze cudzysłowy dla kluczy i/lub wartości łańcuchowych; oraz toleruje mieszanie pojedynczych i podwójnych cudzysłowów, np. {'name': "John Doe", "language":'Pascal'}
  3. zezwala na końcowy przecinek po ostatnim elemencie tablicy i/lub obiektu, np. {"keywords":["if","begin","for",], "IDEs":["Lazarus","fpIDE","MSEide"],}

Zobacz też