JSON + Python #1 – wprowadzenie
YAML, yamnik, jamniczek … w połączeniu z Pythonem, może tworzyć zgrany duet. YAML jako plik konfiguracyjny dowolnego kodu, testów itp.
JSON’a spotkamy na każdym kroku, ścieżki wytyczane przez kolejne fale dorastających w firmach młodych adeptów „IT” usiane są jego plikami. Stworzony by żyło się lepiej i czytelniej. Chciałbym przybliżyć wam odrobinę wiedzy na temat jednego z najpopularniejszych formatów danych.
Kropla historii: czyim synem jest JSON
Na początku lat 2000 komunikacja między serwerem i przeglądarką zdominowana była przez wtyczki Flash lub Java. Któż przy zdrowych zmysłach chciałby ich używać przez resztę życia. Można by „wybudować” taką komunikację bezpośrednio w stronę? Na pewno nie Douglas Crockford, który jako pierwszy wyspecyfikował format JSON. Format ten został wystandaryzowany dopiero w 2013 roku i opublikowany cztery lata później. Nazwa pochodzi od JavaScript Object Notation.
Kim jest JSON
JSON jest to format danych niezależny od używanego języka. Pochodzi z JavaScript, ale wiele współczesnych języków programowania ma możliwość generowania i odczytu danych w formacie JSON – w tym oczywiście Python. Pliki w tym formacie mają rozszerzenie .json. Ponadto należy pamiętać, że podczas wymiany danych między przeglądarką a serwerem, przy pomocy protokołu HTTP, dane mogą być tylko tekstem, więc JSON jest ustrukturyzowanym tekstem. Dzięki temu możemy przekonwertować w dowolny obiekt JavaScript na JSON i wysłać JSON na serwer, na którym zostanie on obsłużony w dowolnym języku, który wspiera ten format danych. JSON jest otwartym standardem, dodatkowo czytelnym i (w miarę) przejrzystym dla człowieka. Przy odrobinie wprawy można go tworzyć całkowicie „z głowy” (bez użycia dodatkowego oprogramowania)
Pierwsze spotkanie z JSON’em
Jak tytuł już zdradza – zajmiemy się JSON’em w przyjaznym środowiska ulubionego węża – Pythona. Najprościej zainstalować bibliotekę przy pomocy aplikacji pip:
pip install json
Do zaczytania biblioteki w Python’ie wystarczy import JSON. Składa się on z par kluczy i argumentów, które można zagnieżdżać praktycznie w nieskończoność. JSON’owy klucz musi być niepowtarzalnym łańcuchem znaków na danym poziomie zagnieżdżenia. Najprostszym kodem tworzącym JSON’a, pamiętając, że jest on tekstem, prezentuje poniższy przykład. Gdzie kluczem jest name a jego argumentem Szymon:
import json
json_var = '{"name":"Szymon"}'
Porównanie struktur Python’a a JSON’a:
Python
- dict
- tuple
- list
- str
- int
- float
- True
- False
- None
JSON
- Object
- Array
- Array
- String
- Number
- Number
- true
- false
- null
Widzimy, że występują w nich różnice. Należy o nich pamiętać podczas pracy z JSON’em. Jeżeli nie będziemy używali wcześniej wspomnianej biblioteki, możemy niemiło się zaskoczyć, zapominając o tych różnicach.
Generacja i odczyt
Skoro mamy już przygotowany string reprezentujący JSON’a, możemy odczytać go i przekonwertować do słownika:
import json
json_var = '{"name":"Szymon"}'
json_obj = json.loads(json_var)
Mając tak utworzony obiekt, możemy na przykład odczytać wartość wybierając klucz:
import json
json_var = '{"name":"Szymon"}'
json_obj = json.loads(json_var)
print(json_obj["name"])
Takiego zabiegu używamy zazwyczaj, gdy odczytamy tekst z pliku o rozszerzeniu .json, aby na nim pracować już bezpośrednio w strukturze Python’a. Jeżeli chcemy utworzyć obiekt JSON’a ze słownika, na którym pracowaliśmy, użyj metody dumps, której argumentem będzie słownik:
import json
test_dict = { "name":"Szymon", "other_data": ["val_1", "val_2"]}
json.dumps(test_dict)
Wiedzę tę dla przykładu możemy wykorzystać, gdy tworzymy serwer HTTP oparty o Python’owego Flaska: