- JSON se jasno preslikava na Python-ove osnovne tipove, s objektima i nizovima predstavljenim kao rječnikima i listama, što razmjenu podataka čini jednostavnom.
- Pythonov json modul pruža fleksibilne funkcije učitavanja/ispisivanja s opcijama za lijep ispis, prilagođene enkodere i stabilan redoslijed ključeva.
- Čitanje, pisanje i parsiranje ugniježđenog JSON-a iz datoteka i API-ja oslanja se na iste osnovne alate, u kombinaciji s pažljivim rukovanjem pogreškama.
- Osim osnovne serijalizacije, JSON u Pythonu podržava formatiranje, validaciju i integraciju s drugim formatima podataka poput CSV-a i XML-a.

JSON je tiho postao zadani jezik za podatke na webu, a ako pišete Python, na njega nailazite posvuda: API-ji, konfiguracijske datoteke, male "baze podataka" za sporedne projekte, zapisnici, pa čak i testne vježbe. Razumijevanje kako se Python-ovi tipovi podataka mapiraju u JSON i kako json Modul koji stvarno funkcionira jedna je od onih vještina koja odjednom pojednostavljuje mnoge svakodnevne zadatke.
Ovaj vodič prolazi kroz JSON iz perspektive Python programera, objašnjavajući što je JSON, kako se odnosi prema JavaScriptu, koje Python tipove može predstavljati i kako parsirati, generirati, lijepo ispisati, validirati i prilagoditi JSON pomoću jsonTakođer ćemo pogledati slučajeve upotrebe iz stvarnog svijeta poput rada s datotekama i API-jima, plus trikove za rukovanje ugniježđenim podacima i rubne slučajeve poput pogrešaka ili posebnih vrijednosti kao što su NaN i beskonačnosti.
Što je JSON i kako se odnosi na podatke u Pythonu
JSON, skraćenica za JavaScript Object Notation, tekstualni je format za strukturirane podatke. koji je izvorno posudio svoju sintaksu od JavaScript objekata i nizova. Unatoč JavaScript korijenima, JSON je jezično agnostičan i podržava ga gotovo svaki moderni jezik, uključujući Python, što ga čini idealnim za razmjenu podataka između servisa, klijenata i poslužitelja.
Konceptualno, JSON koristi samo dva složena gradivna bloka: JavaScript objekt i JavaScript poredakObjekt se ponaša vrlo slično Python rječniku, a niz se ponaša poput Python liste. S ova dva, plus malim skupom primitivnih tipova, JSON može opisati složene ugniježđene strukture podataka.
Objekt u JavaScriptu (i JSON-u) izgleda ovako: {"key1": value1, "key2": value2}To je kolekcija parova ključ-vrijednost, gdje su ključevi nizovi znakova, a vrijednosti mogu biti bilo koja valjana JSON vrijednost (uključujući druge objekte ili nizove). To blisko odgovara Python kodu. dict.
Niz u JavaScriptu (i JSON-u) sličan je Python listi: To je uređena kolekcija vrijednosti, opet koristeći bilo koji valjani JSON tip. Zajedno, objekti i nizovi mogu se proizvoljno ugnijezditi za modeliranje bogatih podataka kao što su korisnički profili, konfiguracijska stabla ili API odgovori.
Mapiranje između JSON tipova i Python tipova je vrlo jednostavno, zbog čega ponekad čujete ljude kako ga u šali nazivaju „PYON“ (Python Object Notation). Kada Python kodira ili dekodira JSON, primjenjuju se sljedeće korespondencije:
- JSON objekt → Piton
dict - JSON niz → Piton
list - JSON niz → Piton
str - JSON broj (cijeli broj) → Piton
int - JSON broj (stvarni) → Piton
float - JSON
true→ PitonTrue - JSON
false→ PitonFalse - JSON
null→ PitonNone
Jedno važno ograničenje je da su ključevi JSON objekta uvijek nizovi znakova, pa ako kodirate Python dict s ključevima koji nisu nizovi znakova (npr. cijeli brojevi ili n-torke), ti će se ključevi pretvoriti u nizove znakova ili će izazvati pogreške ovisno o vašim postavkama. JSON je izvrstan za pohranjivanje strukturiranih podataka poput konfiguracija ili zapisa, ali je ne opći mehanizam kiseljenja za proizvoljne Python objekte.

Ugrađeni json modul u Pythonu
Python dolazi sa standardnim bibliotečnim modulom pod nazivom json, što vam pruža sve što vam je potrebno za rad s JSON-om: parsiranje stringova, učitavanje iz datoteka, serijalizaciju Python objekata i prilagođavanje načina kodiranja i dekodiranja podataka. Ne trebate nikakvu vanjsku ovisnost za tipične JSON zadatke.
Četiri osnovne funkcije koje ćete koristiti većinu vremena su: json.dumps() i json.dump() za pretvaranje Python objekata u JSON i json.loads() i json.load() za prelazak s JSON-a natrag na Python tipove. Verzije s "s" rade s nizovima znakova, dok verzije bez "s" rade s objektima nalik datotekama.
The json Enkoder prema zadanim postavkama podržava određeni skup Python tipova, naime dict, list, tuple (kao nizovi), str, brojevi (int, float, i nabrajanja izvedena iz cijelih/float brojeva), te tri posebna singletona True, Falsei NoneOni se pretvaraju u svoje JSON ekvivalente prema mapiranju opisanom ranije.
Ako trebate serijalizirati prilagođene objekte ili tipove podataka, Dizajn modula je proširiv: možete podklasificirati JSON koder i implementirati default() metodu ili proslijediti prilagođenu default funkciju u json.dump() / json.dumps()Taj prilagođeni hook trebao bi vratiti nešto što se može serijalizirati u JSON formatu (poput dict or list), ili povisiti TypeError ako ne zna kako rukovati zadanim objektom.
Ispod haube, modul također nudi metode kao što su encode() i iterencode(), koji pretvaraju Python podatke u JSON nizove, s iterencode() postupno dobivanje kodiranih dijelova. Rjeđe se koriste izravno, ali vrijedi ih znati ako trebate strujati vrlo velike JSON odgovore.
Pretvaranje Python objekata u JSON
Kada želite pretvoriti Python podatke u JSON tekst, koristite json.dump() or json.dumps(), ovisno o tome želite li izravno pisati u datoteku ili dobiti JSON niz u memoriji. Obje funkcije dijele iste osnovne parametre koji vam omogućuju kontrolu ponašanja pretvorbe.
Funkcija json.dump(obj, fp, ...) uzima Python objekt i objekt sličan datoteci, i piše JSON reprezentaciju obj u tu datoteku. Njegov memorijski ekvivalent, json.dumps(obj, ...), vraća JSON niz umjesto pisanja u datoteku. Oba prihvaćaju niz ključnih argumenata kao što su skipkeys, ensure_ascii, check_circular, allow_nan, indent, separators, defaulti sort_keys.
Svaka od ovih opcija prilagođava ponašanje kodiranja na načine koji su vrlo važni u stvarnim projektima: Možete odabrati želite li preskočiti nevažeće ključeve, prisiliti ASCII izlaz, lijepo ispisati rezultat, kontrolirati razmake, definirati prilagođenu serijalizaciju za nestandardne objekte ili stabilizirati redoslijed ključeva za testiranje i razlike.
Evo što glavni parametri znače u praksi:
skipkeys: ako je postavljeno naTrue, ključevi rječnika koji nisu tipastr,int,float,boolorNonetiho se preskaču umjesto da se podižuTypeErrorAko preferirate ponašanje bez kvarova kada su tipke čudne, ostavite to kaoFalse.ensure_ascii: kadaTrue(zadano), znakovi koji nisu ASCII i neispisivi znakovi se izbjegavaju (npr. kao\uXXXX) tako da izlaz ostaje čisti ASCII. KadaFalseUnicode znakovi se pišu kakvi jesu, što je obično bolje za konfiguracije ili zapisnike čitljive ljudima.check_circular: ifTrue, enkoder provjerava kružne reference u listama, rječnikima i prilagođeno kodiranim objektima kako bi spriječio beskonačnu rekurziju. Postavljanjem naFalseonemogućuje tu sigurnosnu mrežu i može dovesti doRecursionErrorako su vaše strukture samoreferencijalne.allow_nan: ifTrue, posebne vrijednosti s pomičnim zarezom kao što suNaN,Infinityi-Infinitydopušteni su i kodirani na način kompatibilan s JavaScriptom, iako nisu strogo valjani JSON prema specifikaciji. AkoFalse, pokušaj kodiranja takvih vrijednosti povećat ćeValueError.indent: nenegativni cijeli broj (ili niz) koji kontrolira lijepi ispis. Pozitivan broj znači da se broj razmaka po ugniježđenoj razini povećava. Niz (kao"\t") se koristi izravno za uvlačenje.None(zadano) odabire najkompaktniji prikaz, bez dodatnih znakova za novi red osim potrebnog.separators: n-torka(item_separator, key_separator)kontrolirajući interpunkciju i razmake između stavki te između ključeva i vrijednosti. Za najsloženiji JSON obično se koristi(",", ":")za uklanjanje svih opcionalnih prostora.default: funkcija koja prima bilo koji objekt koji koder ne zna kako obraditi. Mora vratiti JSON-serijalizirajuću zamjenu (poputdictorlist), ili povisitiTypeErrorOvo je glavni korak za serijaliziranje vlastitih klasa.sort_keys: ifTrue, rječnici su kodirani sa sortiranim ključevima. Ovo je izuzetno korisno za regresijske testove i reproducibilne izlaze, gdje želite da JSON dumpovi budu stabilni tijekom izvođenja.
Kao konkretan primjer, zamislite da imate miješanu Python listu koji sadrži cijele brojeve i rječnik s nazivom, ID-om i pomičnim zarezom. JSON možete stvoriti i pohraniti ovako:
import pathlib
import json
path = pathlib.Path("myTextFile.json")
data =
with path.open(mode="wt") as f:
json.dump(data, f)
print(json.dumps(data, indent=4))
Ispisani JSON bit će lijepo formatiran zahvaljujući indent=4, prikazivanje svake stavke popisa i ključa rječnika u zasebnom retku. To znatno olakšava otklanjanje pogrešaka i ručno uređivanje u usporedbi s jednim, gustim retkom teksta.
Parsiranje JSON-a natrag u Python
Za povratak s JSON teksta na Python objekte, koristite odgovarajući par funkcija: json.load() (za objekte slične datotekama) i json.loads() (za JSON nizove). Ove funkcije parsiraju ulaz i ponovno stvaraju Python tipove prema istoj tablici mapiranja kao i prije.
Potpisi izgledaju otprilike ovako: json.load(fp, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, kw) i json.loads(s, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, kw)Na osnovnoj razini, možete ih pozvati samo s JSON ulazom, ali dodatni argumenti otvaraju vrata naprednijem ponašanju parsiranja.
Kuke poput object_hook i object_pairs_hook omogućuju vam prilagodbu načina pretvaranja JSON objekata u Python strukture, dajući vam ili dekodirani dict ili popis (key, value) parove. Ovo je korisno ako želite izravno iz JSON-a izraditi prilagođene klase ili sačuvati redoslijed na određeni način.
Drugi pozivi kao što su parse_float, parse_inti parse_constant omogućuju vam kontrolu nad načinom interpretacije brojeva i posebnih tokena. Na primjer, možda biste željeli koristiti Decimal umjesto float za novčane vrijednosti ili transformirati "NaN", "inf"i "-inf" u stražarske objekte po vašem izboru.
Nastavljajući prethodni primjer, JSON datoteku koju ste napisali možete pročitati ovako:
with path.open(mode="rt") as f:
data = json.load(f)
print(data)
Rezultirajući izlaz bit će regularna Python lista i rječnik, na primjer , kojima možete manipulirati svim uobičajenim Python operacijama. Iz perspektive vašeg koda, to su opet „samo podaci“.
Koje tipove Python može pretvoriti u JSON
Ne može se svaki Python objekt odmah pretvoriti u JSON, stoga je korisno zapamtiti dopušteni skup. Praktični enkoderi podržavaju uobičajene kontejnerske i skalarne tipove, plus logičke vrijednosti i Nonei mapirajte ih na minimalni skup JSON tipova.
Prema zadanim postavkama, možete sigurno proslijediti sljedeće Python objekte u json.dumps():
dict(kodirano kao JSON objekti)listituple(kodirano kao JSON nizovi)str(kodirano kao JSON nizovi znakova)intifloat(kodirano kao JSON brojevi)TrueiFalse(kodirano kaotrueifalse)None(kodirano kaonull)
Kada Python kodira ove podatke, mapiranje natrag u JSON je jednostavno, i obrnuto prilikom dekodiranja. Na primjer, Python tuple postaje JSON niz i dobivate list ponovno pri učitavanju. Nabrajanja izvedena iz int or float mogu se kodirati i kao brojevi.
Sve ostalo zahtijeva prilagodbu default sekundant (za pretvaranje objekata u serijalizabilnu reprezentaciju) ili će uzrokovati TypeErrorTo je namjerno: JSON je namijenjen podacima, a ne proizvoljnim grafovima objekata s ponašanjem i metodama poput onih koje biste serijalizirali pomoću pickle.
Za većinu svakodnevnih poslova, ovaj podskup tipova pokriva većinu slučajeva upotrebe, uključujući API korisne terete, konfiguracijska stabla, korisničke postavke, osnovne zapisnike i male datoteke "nalik bazi podataka" za prototipove ili alate za jednog korisnika.
Lijep ispis, kompaktan ispis i uređene tipke
Sirovi JSON izlaz je obično potpuno valjan, ali ga je teško čitati, budući da se često generira bez nepotrebnih razmaka. Za otklanjanje pogrešaka, bilježenje ili dijeljenje s drugim programerima često vam je potreban čitljiv, uvučeni JSON umjesto jednolinijske verzije.
The indent parametar json.dumps() je glavna poluga za lijep tisak, što vam omogućuje da Pythonu kažete koliko razmaka (ili koji niz znakova) treba koristiti po razini uvlačenja. Tipičan izbor je indent=4, iako neke kodne baze preferiraju dva razmaka ili tabulatore; stilske konvencije razlikuju se od projekta do projekta.
The separators argument vam omogućuje još finije podešavanje praznog prostora, dajući tuple poput (", ", ": ") prema zadanim postavkama za izlaz prilagođen ljudima. Ako želite najkompaktniji mogući prikaz - na primjer, za smanjenje veličine korisnog tereta na mreži - možete postaviti separators=(",", ":") za uklanjanje razmaka nakon zareza i dvotočaka.
Kada vas zanima deterministički izlaz, na primjer u jediničnim testovima ili usporedbama snimaka, Aktiviranje sort_keys=True izbacuje ključeve rječnika iz enkodera u sortiranom redoslijedu. Na taj način, dva izvršavanja koja proizvode semantički identične podatke ne razlikuju se samo zato što rječnici slučajno ispisuju ključeve u različitom redoslijedu.
Zajedno, indent, separatorsi sort_keys dati vam puno kontrole o tome je li vaš JSON optimiziran za strojeve (kompaktan, bez razmaka) ili za ljude (uvučen, poravnat, sa stabilnim oblikom kroz prolaze).
Ugniježđeni podaci, strategije parsiranja i obrasci pristupa
U stvarnom JSON-u, ravne strukture su iznimka; Obično ćete imati posla s ugniježđenim objektima i nizovima. Zamislite tipičan korisnički zapis u aplikaciji za e-trgovinu: osobni podaci, ugniježđene adrese za dostavu, ugniježđeni podaci za naplatu i možda popis narudžbi, od kojih je svaka sama po sebi složena struktura.
Prilikom dekodiranja JSON-a u Python, ugniježđeni podaci postaju kombinacije rječnika i popisa, i možete mu pristupiti pomoću standardnih indeksnih i ključnih pretraga. Za plitke strukture ovo je jednostavno: data, data, I tako dalje.
Za duboko ugniježđene ili dinamičke strukture, možda biste preferirali generičkiji pristup, kao što je pisanje male rekurzivne funkcije koja traži ključeve ili koja obilazi stablo rječnika i popisa. Rekurzivna rješenja su često kraća i lakša za čitanje od iterativnih prilikom pregledavanja proizvoljno ugniježđenih podataka.
Neugniježđenom (ravnom) JSON-u je lakše pristupiti izravno s tvrdo kodiranim ključevima, što može biti sasvim u redu za male uslužne programe ili kada u potpunosti kontrolirate ulaz. Međutim, prilikom korištenja vanjskih API-ja uobičajeno je pisati male pomoćne funkcije koje obuhvaćaju strukturu, tako da ne prskate lance po cijeloj vašoj kodnoj bazi.
Bez obzira na dubinu, isto json.loads() primjenjuje se ponašanje: Funkcija prihvaća JSON niz i stvara izvorne Python tipove koje zatim manipulirate uobičajenim Python alatima. Nije potrebna nikakva posebna sintaksa osim uobičajene. dict i list indeksiranje.
Rad s JSON datotekama: čitanje, pisanje i dodavanje
JSON je iznenađujuće praktičan i lagan format za pohranu za male projekte, konfiguracijske datoteke ili skripte koje trebaju održavati neko trajno stanje. Umjesto da odmah posežete za punom bazom podataka, često se možete izvući s jednom ili dvije JSON datoteke na neko vrijeme.
Pisanje JSON-a u datoteku obično je proces u dva koraka: serijalizirajte Python podatke pomoću json.dumps() ili izravno s json.dump(), a zatim provjerite je li rezultirajući niz zapisan na disk. Ako pozovete open('data.json', 'w'), u načinu pisanja dobivate identifikator datoteke koji ili stvara datoteku ili je skraćuje ako već postoji.
Za ugniježđene strukture, protokol se ne razlikuje od ravnih podataka: još uvijek koristiš isto json.dump() poziv, a ugniježđene kombinacije popisa i rječnika kodiraju se rekurzivno. Jedina odluka koju obično trebate donijeti je koliko uvlačenja želite za čitljivost u odnosu na veličinu datoteke.
Čitanje JSON-a iz datoteke je obrnuto: otvaranje datoteke u tekstualnom načinu rada, proslijedi objekt datoteke json.load(), i dobivate natrag svoju Python strukturu podataka. Ponašanje je ponovno neovisno o tome koliko duboko ugniježđivanje ide - dekoder to sve rješava za vas.
Ako trebate dodati JSON podatke postojećim datotekama, Stvari postaju složenije. Sam JSON ne podržava "streaming append" na trivijalan način jer cijela datoteka mora biti valjani JSON. Uobičajeni obrazac je pohranjivanje niza zapisa i čitanje/modificiranje/pisanje cijelog niza ili korištenje JSON-a razdvojenog linijama gdje je svaki redak zaseban JSON objekt kojem se može dodavati bez prepisivanja prethodnih redaka.
JSON u stvarnom svijetu: API-ji, pohrana i razmjena
Nakon što počnete graditi prave aplikacije, JSON brzo postaje vezivno tkivo koji povezuje web klijente i poslužitelje, mikroservise i API-je trećih strana. Cijeni se i zato što je kompaktan i zato što ga ljudi i dalje mogu relativno lako čitati i uređivati.
U API interakciji, JSON je daleko najčešći format korisnog sadržaja, posebno u RESTful uslugama. Python aplikacije obično koriste biblioteke poput requests slanje HTTP zahtjeva i primati JSON odgovore, a zatim analizirajte te odgovore pomoću json.loads() ili s pomoćnim metodama koje ga omotavaju.
JSON je također popularan format za konfiguracijske datoteke i zapisnike, gdje ga njegova strukturirana priroda ključ-vrijednost čini mnogo izražajnijim od običnog teksta, a istovremeno ostaje jednostavan u usporedbi s potpunim bazama podataka. Komponente sustava mogu dijeliti konfiguraciju putem JSON-a, a agregatori zapisnika mogu parsirati JSON zapisnike kako bi ih lakše filtrirali ili analizirali.
Drugi veliki slučaj upotrebe je serijalizacija i deserijalizacija struktura podataka, pretvaranje kolekcija u memoriji u JSON nizove znakova (serijalizacija) i njihova kasnija rekonstrukcija (deserijalizacija). Ovako se pohranjuju korisničke postavke, prenijeti strukturirane poruke kroz redove čekanja ili slati ugniježđene objekte preko granica servisa, pod uvjetom da se držite JSON-kompatibilnih tipova ili osigurate prilagođene enkodere.
Osim samog JSON-a, Python kod često treba pretvarati između JSON-a i drugih formata, kao što su XML, CSV ili običan tekst. Na primjer, možete pročitati CSV iz naslijeđenog sustava, pretvoriti ga u popis rječnika, a zatim ga spremiti kao JSON za moderni API. Ili možete izvući JSON iz API-ja, normalizirati ga i napisati CSV za analitičare kako bi ga učitali u proračunske tablice.
Formatiranje, validacija i dodatne operacije na JSON-u
Nakon što se ovladate osnovnim čitanjem i pisanjem, Postoji niz malih, ali korisnih operacija koje možete izvesti na JSON podacima kako biste poboljšali svoj tijek rada: formatiranje za čitljivost, izravnavanje ugniježđenih struktura, provjera je li niz znakova doista JSON i sortiranje podataka za dosljedne usporedbe.
Lijep ispis s json.dumps(..., indent=...) je prvi korak, što vam daje lijepo raspoređene hijerarhije koje olakšavaju uočavanje strukturnih problema na prvi pogled. To je posebno korisno tijekom otklanjanja pogrešaka ili prilikom dijeljenja primjera u dokumentaciji.
Spljoštavanje ugniježđenog JSON-a može olakšati obradu i analizu nizvodno, posebno ako trebate pretvoriti podatke u tablični oblik poput CSV-a ili ih unijeti u alate koji očekuju parove ključ-vrijednost umjesto duboko ugniježđenih objekata. Obično sami implementirate izravnavanje pomoću rekurzije ili iterativnog prolaska kroz rječnike i popise.
Validacija JSON-a često se svodi na pokušaj parsiranja i hvatanja iznimki, pogotovo ako samo provjeravate je li niz sintaktički ispravan. Za rigoroznije provjere možete koristiti JSON shemu i vanjske biblioteke, ali za mnoge slučajeve jednostavan try/except oko json.loads() dovoljno je.
Sortiranje JSON podataka prema određenim vrijednostima ili ključevima može pomoći pri usporedbi odgovora, generiranje stabilnih snimaka za testove ili jednostavno osiguravanje da su slični objekti grupirani zajedno. Možete sortirati temeljne Python liste i rječnike prije ispisa ili se osloniti na sort_keys=True kada je fokus na ključnom redoslijedu unutar objekata.
Obrada grešaka pri radu s JSON-om
Čak i dobro strukturirani sustavi mogu naići na neispravan JSON ili neočekivane podatke, stoga je robusno rukovanje greškama oko parsiranja i kodiranja JSON-a ključno. Python izražava te probleme putem iznimki, a idiomatski način rješavanja tih problema je zamatanje operacija u try...except blokovi.
Prilikom dekodiranja JSON-a, najčešći problem je nevažeća sintaksa, kao što su nedostajući navodnici oko naziva svojstava ili zarezi na kraju. json modul će izazvati grešku dekodiranja (obično json.JSONDecodeError), koje možete uhvatiti i zabilježiti ili pretvoriti u poruke prilagođene korisniku.
Na primjer, pokušaj parsiranja oštećenog niza može rezultirati greškom poput ove: Failed to decode JSON: Expecting property name enclosed in double quotes: line 1 column 29 (char 28)Ovakva poruka vam govori ne samo da parsiranje nije uspjelo, već i gdje se u ulazu parser zbunio.
Na strani kodiranja, mogli biste naići na TypeError prilikom pokušaja serijalizacije nepodržanih tipova, or ValueError ako ne dopustite NaN i beskonačnosti putem allow_nan=False ali vaši podaci sadrže takve vrijednosti. Kružne reference u spremnicima također mogu pokrenuti RecursionError ako onemogućite kružne provjere.
Najbolja praksa je tretirati JSON operacije kao pogrešive I/O operacije, posebno pri čitanju iz mrežnih izvora ili vanjskih datoteka: uvijek pretpostavite da nešto može poći po zlu i u skladu s tim uhvatite iznimke, eventualno dodajući slojeve validacije kako biste nametnuli specifičnija ograničenja na svoje podatke. Omatanje json.loads() ili pomoćne metode API-ja u try...except blokovi štite ostatak vašeg koda od kaskadnih grešaka i omogućuju vam povratak korisnički prilagođene JSON pogreške klijentima kada je to prikladno.
Korištenje JSON-a s web API-jima u Pythonu
Većina web API-ja s kojima komunicirate iz Pythona slati će i primati JSON, a tipični razvojni paket kombinira requests biblioteka (za HTTP) s json modul (za parsiranje i generiranje JSON-a). Ova kombinacija čini API integraciju vrlo prirodnom.
Uobičajeni obrazac je pozivanje API krajnje točke, provjerite označava li kod statusa odgovora uspjeh, a zatim analizirati JSON tijeloOdatle možete pristupiti poljima, rukovati ugniježđenim podacima i mapirati odgovor u vlastite modele domene ili pregledavati objekte.
Obrada grešaka postaje posebno važna kada su uključeni mrežni pozivi, jer možete naići ne samo na nevažeći JSON, već i na isteke vremena, pogreške povezivanja ili kvarove na strani poslužitelja koji odgovaraju s HTML-om umjesto JSON-a. Omatanje json.loads() ili pomoćne metode API-ja u try...except blokovi štite ostatak vašeg koda od kaskadnih grešaka.
Nakon parsiranja, API JSON se ponaša baš kao i bilo koja druga Python struktura podataka, pa se sve ranije spomenute tehnike - lijep ispis, izravnavanje, validacija, sortiranje - primjenjuju izravno. Udobno prebacivanje između Python podataka i JSON-a ogroman je poticaj produktivnosti kada spajate usluge. Ako ste usredotočeni na izgradnja stvarnih aplikacijaRano obraćanje pažnje na obrasce rukovanja JSON-om uštedjet će vrijeme za otklanjanje pogrešaka kasnije.
JSON u Pythonu se manje odnosi na poziv jedne funkcije, a više na skup alata: jasna mapiranja tipova, fleksibilni parametri kodiranja, hookovi za prilagođene tipove, jednostavan, ali moćan ulazno/izlazni rad s datotekama i robusni obrasci za parsiranje, formatiranje i validaciju podataka iz vanjskog svijeta, što sve čini JSON prirodnim izborom za Python programere koji se bave modernim aplikacijama vođenim podacima.