JSON, czyli co dobrego dał światu JavaScript

2010-11-24 22:04

O języku JavaScript mogę powiedzieć mnóstwo złych rzeczy. Począwszy od tego, że powszechność stosowania anonimowych funkcji jako callbacków powoduje, że stężenie zagnieżdżonych nawiasów w kodzie osiąga często poziomy lispowe. Skończyć zaś mogę na koszmarnym wsparciu dla “normalnej” obiektowości, znającej chociażby pojęcie klasy i obiektu, który nie jest po prostu przypadkową kolekcją jakichś tam atrybutów.

Lecz co ciekawe, to właśnie takie traktowanie obiektów leży u źródła bardzo pożytecznego wynalazku wywodzącego się z okolic JavaScriptu – czyli formatu JSON (JavaScript Object Notation). Ponieważ w JS wszystko jest swego rodzaju hierarchicznym słownikiem, obiekt możemy zdefiniować podając po prostu listę nazw i definicji (wartości) jego składników:

  1. var foo = {
  2.     "first": "value",
  3.     "second": "another value",
  4.     "compound": { "hello": "world" },
  5.     "integer": 42
  6. }

A ponieważ JavaScript jest językiem interpretowanym, możliwe jest wykonanie kodu podanego jako tekst (funkcją eval). Stąd możliwość użycia składni samego kodu JS – a dokładniej jej podzbioru zaprezentowanego wyżej – jako formatu serializacji obiektów, a więc w praktyce do przechowywania dowolnych danych. I tym właśnie jest JSON.

Wśród zalet tego formatu, obok natywnej obsługi przez jeden z popularnych języków programowania, na pewno da się łatwo zauważyć prostotę połączoną ze sporymi możliwościami. JSON to co najmniej “hierarchiczna wersja INI” z kilkoma dodatkami, takimi jak obsługa tablic czy kluczy będących dowolnymi ciągami znaków. Format nie jest zaś ani tak rozwlekły jak XML, ani tak ścisły w swej składni jak YAML. Jest więc łatwy do czytania i pisania dla człowieka oraz nie daje dużego narzutu przy przesyłaniu przez sieć. Stąd zresztą bierze się jego popularność do takich zastosowań jak zdalne wywoływanie funkcji (RPC) jako alternatywa dla przyciężkiego, XML-owego standardu SOAP. Korzysta z niego chociażby jeden z wariantów API Facebooka.

Jak wygląda obsługa JSON-a w językach programowania poza JavaScriptem? Otóż całkiem dobrze, co też opisuję dokładniej poniżej. I tak:

  • Zwykła Java oferuje pakiet org.json, w którym potrzebne klasy (jak JSONObject i JSONArray) są dostępne do użycia.
  • W Pythonie mamy pakiet o nazwie simplejson (niektóre starsze wersje 2.x) lub po prostu json. Użycie JSON-a jest w tym języku bardzo proste ze względu na podobny do JavaScriptu model obiektowości.
  • Platforma .NET nie ma (o ile mi wiadomo) wbudowanych narzędzi do obsługi formatu JSON, ale istnieją oczywiście do tego zewnętrzne biblioteki takie jak JSONSharp czy CsJson.
    Update: Okazuje się, że serializator do formatu JSON jednak istnieje (od wersji 3.5) i stanowi go klasa JavaScriptSerializer.

Pełniejsza lista jest dostępna na oficjalnej stronie JSON-a i obejmuje chyba każdy choć trochę szerzej używany język. Niezależnie więc od tego, do czego zechcemy tego formatu użyć i na jakiej platformie pracujemy, powinniśmy być w stanie całkiem łatwo to zrobić.

Tags: , ,
Author: Xion, posted under Programming »


9 comments for post “JSON, czyli co dobrego dał światu JavaScript”.
  1. MichalBe:
    November 24th, 2010 o 23:22

    Uważam że rzezy ktore opisałeś na początku jako ‘złe’ są po prostu specyficzne i dla człowieka którego ‘głównym’ i ‘macierzystym’ językiem jest JS są jak najbardzije naturalne albo wręcz błogosławione;).

  2. Jacek Złydach:
    November 24th, 2010 o 23:32

    Ja już sobie nie wyobrażam programowania bez wyrażeń lambda aka. funkcji anonimowych, a JavaScriptowy model obiektowy jest akurat gdzieniegdzie bardzo popularny :). W sumie jedyna rzecz, która mi się niezbyt podoba w tym języku to traktowanie wszystkich liczb jako floaty.

    Poza tym, dobre (okrągłe) nawiasy nie są złe ;).

  3. cypherq:
    November 25th, 2010 o 12:20

    Mimo wszystko, .NET zawiera natywnie serializację JSON.

    http://blogs.microsoft.co.il/blogs/pini_dayan/archive/2009/03/12/convert-objects-to-json-in-c-using-javascriptserializer.aspx

    Ukrywa się pod nazwą “javascriptserializer”.

  4. Xion:
    November 25th, 2010 o 20:22

    O, dzięki za tę informację. Zastanawiam się tylko, czy ta klasa jest dostępna też w Compact Framework, co można było łatwo pisać aplikacje zintegrowane z fejsbukiem na Windows Phone 7 ;-)

  5. przemeko:
    November 26th, 2010 o 10:26

    Ta niby “klasyczna” obiektowosc zostala na sile dodana do js’a, wlasnie po to zeby ludzie znajacy tylko klasyczne OO za szybko sie nie zniechecali. Ta dwoista natura jest wlaciwie bledem projektowych – bo wprowadza nie potrzebne zamieszanie.

  6. dr.kubus:
    November 27th, 2010 o 11:29

    Nie ważne czy jest w Compact Framweork bo na Windows Phone nie pisze się w Compact Framewrok.

  7. Xion:
    November 27th, 2010 o 16:47

    Cytat za Wikipedią:

    Windows Phone 7 application development will be based on Silverlight, XNA, and the .NET Compact Framework 4 only.

    Pogrubienie moje.

  8. Yuras:
    November 30th, 2010 o 19:27

    Co do .Neta, to polecam bibliotekę Json.Net (opisywałem ją kiedyś u siebie), która działa właściwie niezależnie od wersji. A w JavaScripcie, bardzo fajnie się korzysta z JSONa w jQuery. Zwłaszcza w żądaniach Ajaxowych:)

  9. Kacper Kołodziej:
    December 15th, 2010 o 8:38

    @MichalBe, a znasz kogoś, dla kogo JS jest głównym lub macierzystym językiem? Bo ja nie.
    A poza tym, to JS ma wiele niedociągnięć. Głównym jest to, że każdy tworzy sobie w swojej przeglądarce obsługę JS na własnych zasadach. To jest głównym problemem. Powinno się wyznaczyć standardy i albo ich przestrzegasz, albo nie mów, że to JS.
    JSON rzeczywiście jest formatem przyjaznym, ale pod względem przejrzystości kodu preferuję XML.

Comments are disabled.
 


© 2017 Karol Kuczmarski "Xion". Layout by Urszulka. Powered by WordPress with QuickLaTeX.com.