Blog webdeveloperski Patryk yarpo Jar

JSON i literały obiektowe

Autor wiadomości Styczeń 11, 2011

W Javascript nie ma klas, a mimo tego są obiekty (pojęcie "klasa" jest wprowadzane przez niektóre frameworki, np. Dojo Toolkit). Funkcje klas pełnią prototypy i można ich używać w taki sposób, aby wszystko wyglądało jak w tradycyjnym języku zorientowanym obiektowo. Istnieje także inny sposób tworzenia obiektów - z wykorzystaniem literałów obiektowych.

Na podstawie literałów obiektowych powstał także lekkie format wymiany danych - JSON (ang. JavaScript Object Notation - wym. jā'sən, jak imię "Jason"). polecam jako medium przesyłania danych między serwerem i klientem.

Literał obiektowy

Zamiast tworzyć konstruktor obiektu, np. taki:

function MyExample() {}
MyExample.prototype.myFunction = function() { alert("działa!"); }
var obj = new MyExample();
obj.myFunction();

Można zastosować literał obiektowy:

var obj = {
    myFunction = function() { alert("działa!"); }
}
obj.myFunction();

Pól w takim obiekcie może być oczywiście więcej. Jak być może zauważyłeś, do stworzenia obiektu wykorzystuje się klamry:

{}

Obiekt jest zbiorem pól. Każde pole składa się z klucza i wartości:

var obj = {
    klucz : wartość,
    "nieprawidłowa nazwa zmiennej" : wartość,
    '#$%#$%#$%sdfsdf' : wartość
}
alert(obj.klucz);
alert(obj["nieprawidłowa nazwa zmiennej"]);
alert(obj["#$%#$%#$%sdfsdf"]);

Jak widać ciąg znaków będący kluczem należy objąć w apostrofy lub cudzysłowy, jeśli nie jest prawidłową nazwą zmiennej (np. zmienna nie może mieć spacji w nazwie, ani nie może zaczynać się cyfrą). Do pól można odwoływać się notacją "kropkową" albo jak do tablicy, jako indeks podając ciąg znaków będący kluczem odpowiedniego pola obiektu.

Wartością pola może być:

  • wartość prosta
    • null
    • liczba
    • ciąg znaków
    • true/false
  • obiekt*
    • tablica
    • funkcja
    • obiekt*

W JavaScript kwestia "obiektu" jest dosyć skomplikowana. Funkcja jest też obiektem, podobnie jak tablica. No i w końcu - obiekt to obiekt :P.

Czym jest JSON?

JSON jest w pełni prawidłowym kodem JS. Istnieje różnica między JSON i "literałem obiektowym". W prawidłowym JSONie klucz musi być ujęty w cudzysłów (dokładnie w cudzysłów, nie w apostrof). Piszę prawidłowym, ponieważ nawet nie używając cudzysłowu stworzona struktura zostanie przez funckję `eval' (lub specjalne parsery) poprawnie zinterpretowana jako obiekt JS. Jeśli jednak używasz JSON do wymiany danych z serwerem, to lepiej używać poprawnej struktury - nigdy nie wiadomo, co się może kryć po stronie serwera, stąd lepiej trzymać się standardów.

W przypadku JSON także wartość nie może być tak dowolna jak w literale obiektowym.

Wartości JSON

źródło grafiki: http://www.json.org/

Zatem nie powinno się w JSONie przesyłać funkcji.

Poprawny JSON ma np. taką postać:

{"imie" : "Patryk", "pseudo": "yarpo", "nazwisko": "Jar"}

I taki kod jest np. zwracany do skryptu z serwera w wyniku żądania ajaksowego. Więcej na ten temat we wpisie o JSON wykorzystywanym jako format wymiany danych.

Do czego użyć?

JSON najczęściej używany jest przeze mnie do zwracania danych z serwera podczas wykorzystywania Ajaksa.

Literał obiektowy z lubością wykorzystuje wszędzie, szczególnie przydatny jest przy tworzeniu obiektów z wykorzystaniem wzorca fabryki.

Warto przeczytać

Komentarze (0) Trackbacks (0)

Brak komentarzy.


Leave a comment

 

Brak trackbacków.