JSON (JavaScript Object Notation) to lekki format używany do wymiany danych. Opiera się na podzbiorze języka JavaScript (sposób, w jaki obiekty są budowane w JavaScript). Jak podano w MDN , niektóre JavaScript to nie JSON, a niektóre JSON to nie JavaScript.
Przykładem tego jest odpowiedź usług internetowych. W „dawnych” czasach serwisy internetowe używały XML jako podstawowego formatu danych do przesyłania danych zwrotnych, ale odkąd pojawił się JSON ( format JSON jest określony w RFC 4627 przez Douglasa Crockforda ), był to format preferowany, ponieważ jest o wiele bardziej lekki
O wiele więcej informacji można znaleźć na oficjalnej stronie internetowej JSON .
JSON jest zbudowany na dwóch strukturach:
- Zbiór par nazwa / wartość. W różnych językach jest to realizowane jako obiekt, rekord, struktura, słownik, tablica skrótów, lista kluczy lub tablica asocjacyjna.
- Uporządkowana lista wartości. W większości języków jest to realizowane jako tablica, wektor, lista lub sekwencja.
Struktura JSON
Oto przykład danych JSON:
{
"firstName": "John",
"lastName": "Smith",
"address": {
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": 10021
},
"phoneNumbers": [
"212 555-1234",
"646 555-4567"
]
}
JSON w JavaScript
JSON (w JavaScript) to ciąg znaków!
Ludzie często zakładają, że wszystkie obiekty JavaScript są JSON i że JSON jest obiektem JavaScript. To jest niepoprawne.
W JavaScript nievar x = {x:y}
jest JSON , to jest obiekt JavaScript . Obie nie są tym samym. Odpowiednikiem JSON (reprezentowanym w języku JavaScript) byłby var x = '{"x":"y"}'
. x
jest obiektem typu string, a nie obiektem samym w sobie. Aby przekształcić to w pełnoprawny obiekt JavaScript, musisz go najpierw przeanalizować var x = JSON.parse('{"x":"y"}');
, x
jest teraz obiektem, ale to już nie jest JSON.
Zobacz obiekt JavaScript Vs JSON
Podczas pracy z JSON i JavaScript może pojawić się pokusa, aby użyć eval
funkcji do oceny wyniku zwróconego w wywołaniu zwrotnym, ale nie jest to sugerowane, ponieważ istnieją dwa znaki (U + 2028 i U + 2029) prawidłowe w JSON, ale nie w JavaScript (czytaj więcej o tym tutaj ).
Dlatego zawsze należy próbować użyć skryptu Crockforda, który sprawdza poprawność JSON przed jego oceną. Link do wyjaśnienia skryptu znajduje się tutaj, a tutaj jest bezpośredni link do pliku js. Obecnie każda duża przeglądarka ma własną implementację .
Przykład użycia parsera JSON (z jsonem z powyższego fragmentu kodu):
//The callback function that will be executed once data is received from the server
var callback = function (result) {
var johnny = JSON.parse(result);
//Now, the variable 'johnny' is an object that contains all of the properties
//from the above code snippet (the json example)
alert(johnny.firstName + ' ' + johnny.lastName); //Will alert 'John Smith'
};
Parsera JSON oferuje również inny bardzo użyteczną metodę stringify
. Ta metoda przyjmuje obiekt JavaScript jako parametr i zwraca ciąg znaków w formacie JSON. Jest to przydatne, gdy chcesz wysłać dane z powrotem na serwer:
var anObject = {name: "Andreas", surname : "Grech", age : 20};
var jsonFormat = JSON.stringify(anObject);
//The above method will output this: {"name":"Andreas","surname":"Grech","age":20}
Powyższe dwie metody ( parse
i stringify
) również biorą drugi parametr, który jest funkcją, która będzie wywoływana dla każdego klucza i wartości na każdym poziomie wyniku końcowego, a każda wartość zostanie zastąpiona wynikiem wprowadzonej funkcji. (Więcej na ten temat tutaj )
Btw, dla wszystkich, którzy uważają, że JSON jest przeznaczony tylko do JavaScript, sprawdź ten post, który wyjaśnia i potwierdza inaczej.
Bibliografia