Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
JSON w Pythonie, w skrócie
Konwersja tekst <-> słownik:
import json
dane = json.loads('{"id": 1}') # tekst -> slownik
tekst = json.dumps(dane) # slownik -> tekst

JSON to obecnie bardzo popularny format danych, wciąż zyskujący na popularności. Zyskuje kosztem formatu XML który jest coraz częściej zastępowany przez JSON. Wykorzystywany jest do przechowywania danych, ale również do komunikacji między aplikacjami jako format uniwersalny. Niezależnie od tego skąd dane będą pochodzić, czy będą pobierane z pliku czy np. z usługi sieciowej, sposób jego przetwarzania w Pythonie jest taki sam. Poniżej przedstawiam dane które będę wykorzystywał w przykładach tego rozdziału. Dane w przykładach zawsze będą znajdowały się w pliku dane.json
dane={
"imie":"Andrzej",
"nazwisko": "Klusiewicz",
"adres": {
"miasto": "Warszawa",
"kod": "02-019"
},
"jezyki": ["polski","angielski","Java","R","Python","PL/SQL"]
}
W przykładach będę używał danych umieszczonych w pliku. Do wygodnej zabawy z tym formatem użyję modułu "json". Natywne metody odczytu pliku nie byłyby zbyt użyteczne przy tym formacie danych. Moduł "json" posiada funkcję "load", która przyjmuje zmienną reprezentującą otwarty plik, a zwraca dane w postaci słownika.
import json
plik=open('dane.json',encoding='utf-8')
obj=json.load(plik)
print(obj)
print(type(obj))
plik.close()
Po uruchomieniu powyższego kodu na konsoli zobaczymy:
{'imie': 'Andrzej', 'nazwisko': 'Klusiewicz', 'adres': {'miasto': 'Warszawa', 'kod': '02-019'}, 'jezyki': ['polski', 'angielski', 'Java', 'R', 'Python', 'PL/SQL']}
<class 'dict'>
Jak widzimy po informacji zwracanej przez funkcję "type", jest to zwyczajny słownik, taki z jakim już się wcześniej spotkaliśmy. Skoro tak, to dane możemy teraz przetwarzać tak samo jak każdy inny słownik. Sięgnijmy zatem do wartości elementu znajdującego się pod kluczem "imie":
print(obj['imie'])
Na konsoli zobaczymy:
Andrzej
Możemy znanymi nam już metodami przeiterować i wyświetlić np wszystkie klucze:
for k in obj.keys():
print(k)
Wynik na konsoli:
imie
nazwisko
adres
jezyki
Wszystkie poznane w rozdziale o słownikach metody przetwarzania tego formatu danych mają tu zastosowanie. Co jednak w przypadku bardziej złożonych struktur? Przypomnijmy zawartość pliku:
{
"imie":"Andrzej",
"nazwisko": "Klusiewicz",
"adres": {
"miasto": "Warszawa",
"kod": "02-019"
},
"jezyki": ["polski","angielski","Java","R","Python","PL/SQL"]
}
Wartością klucza "adres" jest struktura złożona. Czyli wartość dla klucza "adres" to kolejny słownik. Chciałbym teraz wydłubać nazwę miasta:
print( obj['adres']['miasto'] )
Czyż Python nie jest piękny? A co jeśli chciałbym przeiterować po wszystkich językach i je wyświetlić na konsoli?
for j in obj['jezyki']:
print(j)
Wynik na konsoli:
polski
angielski
Java
R
Python
PL/SQL
Mogłem tak zrobić, ponieważ zbiór "języki" jest zwracany jako lista. Skoro tak, to również mogę odwoływać się do poszczególnych języków po ich pozycji na liście:
print(obj['jezyki'][2])
Zwróci nam element o indeksie 2 (czyli pozycji trzeciej) z listy języków tj. "Java".
Skoro już wiemy że dane odczytywane jako JSON są zwracane pod postacią pythonowego słownika, to naturalną konsekwencją zapis będzie się odbywał dokładnie odwrotnie tj tworzymy słownik i zrzucamy do pliku. Możemy to zrobić na dwa sposoby. Wybór metody to kwestia wygody użycia, co kto lubi jak komu wygodnie bo efekt jest ten sam. Sposób pierwszy:
import json
obj=dict()
obj['ksiazka']='Finansowy Ninja'
obj['film_na_wieczor']='https://www.youtube.com/watch?v=sCNrK-n68CM'
obj['banknoty']=[10,20,50,100,200,500]
plik=open('jsonout.json',encoding='utf-8',mode="w")
json.dump(obj,plik)
plik.close()
Tworzę pythonowy słownik klucz po kluczu i przypisuję do każdego klucza wartości. Funkcja "dump" z modułu "json" zapisuje słownik w postaci formatu JSON do pliku podanego przez zmienną do drugiego parametru.
Alternatywnie mogę po prostu ręcznie zadeklarować sobie słownik i zainicjalizować go danymi pisanymi jako całość:
import json
dane={
"ksiazka": "Finansowy Ninja",
"film_na_wieczor": "https://www.youtube.com/watch?v=sCNrK-n68CM",
"banknoty": [10,20,50,100,200,500]
}
plik=open('jsonout2.json',encoding='utf-8',mode="w")
json.dump(dane,plik)
plik.close()
W obu przypadkach zawartość pliku wyjściowego jest taka sama:
{"ksiazka": "Finansowy Ninja", "film_na_wieczor": "https://www.youtube.com/watch?v=sCNrK-n68CM", "banknoty": [10, 20, 50, 100, 200, 500]}
Ten kurs daje Ci solidne podstawy Pythona. Jeśli chcesz pójść dalej i pod okiem trenera dojść od pierwszej linijki kodu do własnego modelu uczenia maszynowego, sprawdź nasze pięciodniowe szkolenie Python od podstaw, przez analizę danych, do machine learning. Pierwsze trzy dni to Python w praktyce: typy i kolekcje, instrukcje warunkowe i pętle, funkcje, moduły i pakiety, pliki tekstowe, usługi sieciowe oraz praca z bazą PostgreSQL. Czwarty dzień to analiza danych w pandas (wczytywanie CSV, TSV i XLS, filtrowanie, agregacje, statystyki) i wizualizacja w Matplotlib, Seaborn oraz Plotly. Piąty dzień to uczenie maszynowe w scikit-learn: regresja liniowa i logistyczna, drzewa decyzyjne, las losowy, XGBoost, walidacja predykcji, dobór hiperparametrów i przeciwdziałanie przeuczeniu. Szkolenie ma terminy gwarantowane, czyli odbywa się niezależnie od wielkości grupy.
Szkolenie Python od podstaw, przez analizę danych, do machine learning
To szkolenie może być dofinansowane dla Ciebie z KFS lub BUR.
★★★★★Średnia ocena naszych szkoleń w Google: 5/5
Komentarze (0)
Brak komentarzy...