JSON, skraćenica od JavaScript Object Notation, je široko prihvaćen format za razmenu podataka. Python, kao jedan od najpopularnijih programskih jezika, sadrži ugrađeni JSON modul koji omogućava efikasno parsiranje i manipulaciju JSON podacima. Ovaj vodič će vas detaljno provesti kroz sve aspekte rada sa JSON-om u Pythonu.
Nakon što prođete kroz ovaj vodič, steći ćete znanje o:
- Osnovnim principima JSON formata.
- Načinima parsiranja i kreiranja JSON stringova unutar Pythona.
- Postupcima čitanja i pisanja JSON podataka u datoteke koristeći Python.
Započnimo! 🚀
Šta je JSON?
JSON, kako je već rečeno, predstavlja tekstualni format za razmenu podataka. Iako je prvobitno inspirisan JavaScript objektima, JSON je našao široku primenu i podržan je u gotovo svim programskim jezicima.
Ako ste se ikada susretali sa API-jima (aplikacijskim programskim interfejsima) ili ste radili sa konfiguracionim datotekama, verovatno ste već imali priliku da koristite JSON.
📑 Prilikom komunikacije sa API-jima, podaci se šalju i primaju u JSON formatu. Ovaj format je takođe ključan za komunikaciju između klijenta i servera u softverskim aplikacijama. Pored toga, JSON se može koristiti i za čuvanje podataka opšte namene.
Struktura JSON formata je vrlo slična strukturi Python rečnika. Rečnici su moćni ugrađeni tipovi podataka u Pythonu koji čuvaju informacije u parovima ključ/vrednost.
Pre nego što nastavimo dalje, bitno je napomenuti nekoliko ključnih stvari:
- U Pythonu, JSON objekat se mapira na rečnik.
- JSON niz se predstavlja kao Python lista.
- Bool-ove vrednosti u JSON-u se označavaju kao „true“ i „false“, dok se u Pythonu konvertuju u „True“ i „False“.
Za detaljniji pregled tipova podataka koji se prevode iz JSON-a u Python, pogledajte zvaničnu dokumentaciju ovde.
S obzirom na to da je json
modul deo standardne biblioteke Pythona, nije potrebno instalirati ga dodatno. Možete ga jednostavno uvesti u svoj trenutni direktorijum na sledeći način:
import json
Kako učitati JSON string u Pythonu
Opšta sintaksa za učitavanje JSON stringa u Pythonu izgleda ovako:
<dict_obj> = json.loads(<json_str>)
Gde:
<dict_obj>
je Python rečnik u koji želite učitati JSON string.<json_str>
je validan JSON string.
Ovom operacijom <json_str>
se konvertuje u Python rečnik <dict_obj>
.
Pogledajmo primer. Neka je json_str
JSON string:
json_str=""' { "books": [ { "title": "The Wind in the Willows", "author": "Kenneth Grahame", "year": "1908" }, { "title": "To the Lighthouse", "author": "Virginia Woolf", "year": "1927" } ] } '''
Sledeći kod demonstrira kako učitati json_str
u Python rečnik koristeći metodu loads()
. Korištenjem ugrađene funkcije type()
možete proveriti da li je py_dict
zaista rečnik.
py_dict = json.loads(json_str) type(py_dict) # Output: dict print(py_dict) # Output {'books': [{'title': 'The Wind in the Willows', 'author': 'Kenneth Grahame', 'year': '1908'}, {'title': 'To the Lighthouse', 'author': 'Virginia Woolf', 'year': '1927'}]}
Kao što se vidi, svako polje u JSON stringu je postalo par ključ-vrednost u py_dict
.
Kako kreirati JSON stringove u Pythonu
Pretpostavimo da imate Python rečnik. Kako od njega generisati JSON string?
To se može postići pomoću metode dumps()
sa sledećom sintaksom:
<json_str> = json.dumps(<dict_obj>)
Gde:
<dict_obj>
je Python rečnik od kojeg želite kreirati JSON string.<json_str>
je rezultujući JSON string.
Dakle, metoda dumps()
pretvara <dict_obj>
u JSON string <json_str>
.
Dodajmo novi ključ „filmovi“ u naš postojeći Python rečnik py_dict
:
py_dict["movies"] = [{"title":"The Imitation Game","year":"2014", "lang":"en","watched":True}]
Sada, hajde da pomoću metode dumps()
konvertujemo izmenjeni rečnik u novi JSON string json_str2
.
json_str2 = json.dumps(py_dict) print(json_str2) # Output {"books": [{"title": "The Wind in the Willows", "author": "Kenneth Grahame", "year": "1908"}, {"title": "To the Lighthouse", "author": "Virginia Woolf", "year": "1927"}], "movies": [{"title": "The Imitation Game", "year": "2014", "lang": "en", "watched": true}]}
Kao što vidite, dobijeni JSON string je teško čitljiv bez odgovarajućeg formatiranja. Možete koristiti opcioni parametar indent
da dodate uvlačenje.
To se postiže postavljanjem indent
na celobrojnu vrednost, na primer 2, kao što je prikazano u nastavku:
json_str2 = json.dumps(py_dict, indent = 2) print(json_str2) # Output { "books": [ { "title": "The Wind in the Willows", "author": "Kenneth Grahame", "year": "1908" }, { "title": "To the Lighthouse", "author": "Virginia Woolf", "year": "1927" } ], "movies": [ { "title": "The Imitation Game", "year": "2014", "lang": "en", "watched": true } ] }
Primetićete kako je izlaz sada formatiran sa uvlačenjem i mnogo je pregledniji.
Napomena: 💡 Ako želite da ključevi budu sortirani po abecednom redu, možete postaviti parametar sort_keys
na True
.
Kao što je prikazano u sledećem primeru, ključevi su sada poređani po abecednom redu.
json_str2 = json.dumps(py_dict, indent = 2, sort_keys=True) print(json_str2) # Output { "books": [ { "author": "Kenneth Grahame", "title": "The Wind in the Willows", "year": "1908" }, { "author": "Virginia Woolf", "title": "To the Lighthouse", "year": "1927" } ], "movies": [ { "lang": "en", "title": "The Imitation Game", "watched": true, "year": "2014" } ] }
Ključevi se sada pojavljuju po abecednom redu: „author“, „title“ i „year“.
Do sada ste naučili kako da radite sa JSON stringovima u Pythonu. U narednom odeljku ćete naučiti kako se radi sa JSON datotekama.
Kako čitati JSON datoteku u Pythonu
Da biste pročitali JSON datoteku u Pythonu, koristite sledeću sintaksu:
json.load(<json-file>) # gde je <json-file> bilo koja validna JSON datoteka.
Obratite pažnju da koristimo metodu load()
, a ne loads()
. Metoda loads()
učitava JSON string, dok load()
učitava JSON datoteku.
Preporučuje se da koristite kontekst menadžere prilikom rada sa datotekama u Pythonu. Možete pokušati čitati datoteke i na sledeći način, bez korištenja kontekst menadžera:
my_file = open('students.json','r') contents = my_file.read() print(contents) file.close()
Ako ne zatvorite datoteku, može doći do gubitka resursa.
Međutim, kada radite sa kontekst menadžerima, datoteke se automatski zatvaraju nakon završenih operacija.
Kontekst menadžer možete koristiti za čitanje datoteka na sledeći način:
with open('students.json','r') as file: data = json.load(file) print(data) # Output {'students': [{'roll_num': 'cs27', 'name': 'Anna', 'course': 'CS'}, {'roll_num': 'ep30', 'name': 'Kate', 'course': 'PHY'}]}
Prilikom čitanja iz datoteke, navedite režim čitanja – označen sa ‘r’ u gornjem kodu.
Napomena: Da biste se lako kretali kroz trenutni direktorijum, proverite da li je JSON datoteka u istom folderu kao i main.py
, kao što je prikazano na slici ispod. Ako je vaša JSON datoteka u drugom folderu, obavezno navedite celu putanju do datoteke.
Pročitana JSON datoteka u Pythonu.
U narednom odeljku ćete naučiti kako pisati u JSON datoteku.✍
Kako pisati u JSON datoteku u Pythonu
Da biste pisali u postojeću JSON datoteku ili kreirali novu, koristite metodu dump()
na sledeći način:
json.dump(<dict_obj>,<json_file>) # gde je <dict_obj> Python rečnik # a <json_file> je JSON datoteka
Dakle, gornja sintaksa prebacuje rečnik <dict_obj>
u JSON datoteku <json_file>
.
U prethodnom odeljku smo imali rečnik py_dict
. Hajde da ga sačuvamo u novoj JSON datoteci. Neka se zove new_file.json
.
Sledeći kod prikazuje kako možete koristiti funkciju dump()
:
with open('new_file.json','w') as file: json.dump(py_dict,file)
Napomena: Otvaranje datoteke u režimu pisanja (‘w’) prepiše njen sadržaj ako već postoji. Ako datoteka ne postoji, ona će biti kreirana.
Nakon izvršavanja gornjeg koda, videćete da je nova JSON datoteka kreirana u vašem radnom direktorijumu. Možete je otvoriti i pregledati njen sadržaj.
Kreiranje JSON datoteke u Pythonu
Prilikom pisanja u datoteke, ključni cilj je čuvanje podataka. Ako želite sačuvati formatiranje, možete koristiti parametre indent
i sort_keys
.
Zaključak
⏲ Vreme je za kratak rezime.
U ovom tutorijalu ste naučili:
- Osnove rada sa JSON formatom.
- Kako koristiti metode
loads()
iload()
za čitanje JSON stringova i JSON datoteka, redom. - Kako koristiti metode
dumps()
idump()
za konvertovanje Python rečnika u JSON stringove i JSON datoteke.
Nadam se da vam je ovaj vodič bio koristan. Srećno učenje!
Takođe, preporučujem da pogledate JSON alatke za parsiranje, formatiranje i validaciju.