Vodič za programere za Python podatke i JSON

Posljednje ažuriranje: 12/29/2025
  • JSON se jasno preslikava na osnovne Python tipove, s objektima i nizovima predstavljenim kao rječnikima i listama, što razmjenu podataka čini jednostavnom.
  • Python-ov 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 greškama.
  • Pored osnovne serijalizacije, JSON u Pythonu podržava formatiranje, validaciju i integraciju s drugim formatima podataka poput CSV-a i XML-a.

Tutorijal za Python JSON podatke

JSON je tiho postao podrazumijevani jezik za podatke na webu, ...a ako pišete Python, na njega nailazite svuda: API-ji, konfiguracijske datoteke, male "baze podataka" za sporedne projekte, logove, pa čak i testne fixture-e. Razumijevanje kako se Python-ovi tipovi podataka mapiraju u JSON i kako... json Modul koji zaista funkcioniše je jedna od onih vještina koja odjednom pojednostavljuje mnoge svakodnevne zadatke.

Ovaj vodič prolazi kroz JSON iz perspektive Python programera, objašnjavajući šta je JSON, kako se odnosi prema JavaScriptu, koje Python tipove može predstavljati i kako parsirati, generirati, lijepo ispisati, validirati i prilagoditi JSON koristeći 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 grešaka ili posebnih vrijednosti kao što su NaN i beskonačnosti.

Šta je JSON i kako se odnosi na podatke u Pythonu

JSON, skraćenica za JavaScript Object Notation, je tekstualni format za strukturirane podatke. koji je prvobitno posudio svoju sintaksu od JavaScript objekata i nizova. Uprkos JavaScript korijenima, JSON je jezički 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 servera.

Konceptualno, JSON koristi samo dva kompozitna gradivna bloka: JavaScript objekt i JavaScript arrayObjekt se ponaša slično kao Python rječnik, a niz kao Python lista. 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 stringovi, a vrijednosti mogu biti bilo koja validna JSON vrijednost (uključujući druge objekte ili nizove). Ovo blisko odgovara Python kodu. dict.

Niz u JavaScriptu (i JSON-u) je sličan Python listi: To je uređena kolekcija vrijednosti, opet koristeći bilo koji važeći JSON tip. Zajedno, objekti i nizovi mogu se proizvoljno ugniježđivati ​​kako bi se modelirali bogati podaci kao što su korisnički profili, konfiguracijska stabla ili API odgovori.

Mapiranje između JSON tipova i Python tipova je vrlo jednostavno, Zbog toga 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 string → piton str
  • JSON broj (cijeli broj) → piton int
  • JSON broj (stvarni) → piton float
  • JSON true piton True
  • JSON false piton False
  • JSON null piton None

Jedno važno ograničenje je to što su ključevi JSON objekta uvijek stringovi, Dakle, ako kodirate Python dict s ključevima koji nisu stringovi (npr. cijeli brojevi ili n-torke), ti ključevi će biti pretvoreni u stringove ili će izazvati greške ovisno o vašim postavkama. JSON je odličan za pohranjivanje strukturiranih podataka poput konfiguracija ili zapisa, ali je ne opći mehanizam kiseljenja za proizvoljne Python objekte.

Mapiranje podataka u Pythonu (JSON)

Ugrađeni JSON modul u Pythonu

Python dolazi sa standardnim bibliotečkim 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 zavisnost 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 sa JSON-a nazad na Python tipove. Verzije sa "s" rade sa stringovima, dok verzije bez "s" rade sa objektima nalik datotekama.

The json Enkoder podrazumevano podržava određeni skup Python tipova, naime dict, list, tuple (kao nizovi), str, brojevi (int, float, i nabrajanja izvedena iz cijelih/float brojeva), i tri specijalna singletona True, False, I 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 enkoder i implementirati default() metodu ili proslijediti prilagođenu default funkciju u json.dump() / json.dumps()Taj prilagođeni hook treba da vrati nešto što se može serijalizovati u JSON formatu (kao što je dict or list), ili podići TypeError ako ne zna kako da rukuje datim objektom.

Ispod haube, modul također nudi metode kao što su encode() i iterencode(), koji pretvaraju Python podatke u JSON stringove, sa iterencode() postepeno dobijanje kodiranih dijelova. Ovo se rjeđe koristi direktno, ali je vrijedno znati ako trebate strimovati vrlo velike JSON odgovore.

Konvertovanje Python objekata u JSON

Kada želite pretvoriti Python podatke u JSON tekst, koristite json.dump() or json.dumps(), u zavisnosti od toga da li želite direktno pisati u datoteku ili dobiti JSON string u memoriji. Obje funkcije dijele iste osnovne parametre koji vam omogućavaju da kontrolišete ponašanje konverzije.

Funkcija json.dump(obj, fp, ...) uzima Python objekt i objekt sličan datoteci, i piše JSON reprezentaciju obj u tu datoteku. Njen ekvivalent u memoriji, json.dumps(obj, ...), vraća JSON string umjesto pisanja u datoteku. Oba prihvataju niz ključnih argumenata kao što su skipkeys, ensure_ascii, check_circular, allow_nan, indent, separators, default, I sort_keys.

Svaka od ovih opcija podešava ponašanje kodiranja na načine koji su veoma važni u stvarnim projektima: Možete odabrati da li želite 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 šta glavni parametri znače u praktičnom smislu:

  • skipkeys: ako je postavljeno na True, ključevi rječnika koji nisu tipa str, int, float, bool or None se tiho preskaču umjesto da se podižu TypeErrorAko preferirate ponašanje bez greške kada su tipke čudne, ostavite to kao False.
  • ensure_ascii: kada True (zadano), znakovi koji nisu ASCII i znakovi koji se ne mogu štampati se izbjegavaju (npr. kao \uXXXX) tako da izlaz ostaje čisti ASCII. Kada FalseUnicode znakovi se pišu kakvi jesu, što je obično bolje za konfiguracije ili logove koje ljudi mogu čitati.
  • check_circular: if True, enkoder provjerava kružne reference u listama, rječnikima i prilagođeno kodiranim objektima kako bi spriječio beskonačnu rekurziju. Postavljanjem na False onemogućava tu sigurnosnu mrežu i može dovesti do RecursionError ako su vaše strukture samoreferencijalne.
  • allow_nan: if True, posebne vrijednosti s pokretnim zarezom kao što su NaN, Infinity, I -Infinity su dozvoljeni i kodirani na JavaScript-kompatibilan način, čak i ako nisu strogo validni JSON prema specifikaciji. Ako False, pokušaj kodiranja takvih vrijednosti će povećati ValueError.
  • indent: nenegativan cijeli broj (ili niz znakova) koji kontrolira lijep ispis. Pozitivan broj znači da postoji određeni broj razmaka po ugniježđenom nivou. Niz znakova (kao "\t") se koristi direktno za uvlačenje. None (zadano) bira najkompaktniju reprezentaciju, bez dodatnih znakova za novi red osim potrebnog.
  • separators: korka (item_separator, key_separator) kontrolisanje interpunkcije i razmaka između stavki i između ključeva i vrijednosti. Za najsloženiji JSON, obično se koristi (",", ":") da uklonite sve opcionalne prostore.
  • default: funkcija koja prima bilo koji objekt koji enkoder ne zna kako obraditi. Mora vratiti JSON-serijalizirajuću zamjenu (kao što je dict or list), ili podići TypeErrorOvo je glavni korak za pravljenje serijalizirajućih vlastitih klasa.
  • sort_keys: if True, 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 tokom izvršavanja.

Kao konkretan primjer, zamislite da imate miješanu Python listu koji sadrži cijele brojeve i rječnik s imenom, ID-om i rezultatom u pokretnom zarezu. JSON možete kreirati 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 će biti lijepo formatiran zahvaljujući indent=4, prikazivanje svake stavke liste i ključa rječnika u zasebnom redu. Ovo znatno olakšava otklanjanje grešaka i ručno uređivanje u poređenju sa jednim, gustim redom teksta.

Parsiranje JSON-a nazad u Python

Da biste se vratili sa JSON teksta nazad na Python objekte, koristite odgovarajući par funkcija: json.load() (za objekte slične datotekama) i json.loads() (za JSON stringove). Ove funkcije parsiraju ulaz i ponovo kreiraju Python tipove prema istoj tabeli 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 osnovnom nivou, možete ih pozvati samo sa JSON ulazom, ali dodatni argumenti otvaraju vrata naprednijem ponašanju parsiranja.

Udice poput object_hook i object_pairs_hook omogućavaju vam da prilagodite kako se JSON objekti pretvaraju u Python strukture, tako što vam date ili dekodirani dict ili spisak (key, value) parove respektivno. Ovo je korisno ako želite direktno iz JSON-a izgraditi prilagođene klase ili sačuvati redoslijed na određeni način.

Drugi pozivi kao što su parse_float, parse_int, I parse_constant omogućavaju vam da kontrolišete kako se brojevi i specijalni tokeni interpretiraju. Na primjer, možda biste željeli koristiti Decimal umjesto float za monetarne 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 na sljedeći način:

with path.open(mode="rt") as f:
    data = json.load(f)
print(data)

Rezultirajući izlaz će biti regularna Python lista i rječnik, na primjer , koje 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, pa je korisno zapamtiti dozvoljeni skup. Praktični enkoderi podržavaju uobičajene kontejnerske i skalarne tipove, plus logičke vrijednosti i None, i mapirajte ih na minimalni skup JSON tipova.

Podrazumevano, možete bezbedno proslediti sledeće Python objekte u json.dumps():

  • dict (kodirano kao JSON objekti)
  • list i tuple (kodirano kao JSON nizovi)
  • str (kodirano kao JSON stringovi)
  • int i float (kodirano kao JSON brojevi)
  • True i False (kodirano kao true i false)
  • None (kodirano kao null)

Kada Python kodira ove podatke, mapiranje nazad u JSON je jednostavno, i obrnuto prilikom dekodiranja. Na primjer, Python tuple postaje JSON niz i dobijate list ponovo pri učitavanju. Nabrajanja izvedena iz int or float mogu se kodirati i kao brojevi.

Sve ostalo zahtijeva prilagođavanje default rukovalac (da se objekti pretvore u serijalizabilnu reprezentaciju) ili će uzrokovati TypeErrorOvo je namjerno: JSON je namijenjen za podatke, a ne za proizvoljne grafove 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 logove i male datoteke "nalik bazi podataka" za prototipove ili alate za jednog korisnika.

Lijep ispis, kompaktan ispis i uređeni tasteri

Sirovi JSON izlaz je obično potpuno validan, ali ga je teško pročitati, budući da se često generira bez nepotrebnih razmaka. Za otklanjanje grešaka, evidentiranje ili dijeljenje s drugim programerima, često vam je potreban čitljiv, uvučen JSON umjesto jednolinijske verzije.

The indent parametar od json.dumps() je glavna poluga za lijepu štampu, omogućavajući vam da Pythonu kažete koliko razmaka (ili koji niz znakova) treba koristiti po nivou uvlačenja. Tipičan izbor je indent=4, iako neke kodne baze preferiraju dva razmaka ili tabulatore; stilske konvencije se razlikuju od projekta do projekta.

The separators argument vam omogućava još finije podešavanje praznog prostora, dajući tuple kao (", ", ": ") po zadanim postavkama za izlaz prilagođen ljudima. Ako želite najkompaktniju moguću reprezentaciju - na primjer, za smanjenje veličine korisnog tereta preko mreže - možete postaviti separators=(",", ":") za uklanjanje razmaka nakon zareza i dvotačaka.

Kada vam je važan deterministički izlaz, na primjer u jediničnim testovima ili poređenjima snimaka, aktiviranje sort_keys=True stvara ključeve rječnika koji izlazi 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, separators, I sort_keys daju vam mnogo kontrole o tome da li je vaš JSON optimizovan za mašine (kompaktan, bez praznog prostora) ili za ljude (uvučen, poravnat, sa stabilnim oblikom u svim prolaznostima).

Ugniježđeni podaci, strategije parsiranja i obrasci pristupa

U stvarnom JSON-u, ravne strukture su izuzetak; Obično ćete imati posla s ugniježđenim objektima i nizovima. Zamislite tipičan korisnički zapis u aplikaciji za e-trgovinu: lični podaci, ugniježđene adrese za dostavu, ugniježđeni detalji za naplatu i možda lista 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 lista, i možete mu pristupiti korištenjem standardnih indeksa 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 pretražuje ključeve ili koja obilazi stablo rječnika i lista. Rekurzivna rješenja su često kraća i lakša za čitanje od iterativnih prilikom pregleda proizvoljno ugniježđenih podataka.

Neugniježđenom (ravnom) JSON-u je lakše pristupiti direktno pomoću čvrsto kodiranih ključeva, š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 enkapsuliraju strukturu, tako da ne preopterećujete lance po cijeloj vašoj kodnoj bazi.

Bez obzira na dubinu, isto json.loads() primjenjuje se ponašanje: Funkcija prihvata JSON string i generiše izvorne Python tipove koje zatim manipulišete pomoću regularnih Python alata. Nije potrebna nikakva posebna sintaksa osim uobičajene. dict i list indeksiranje.

Rad sa JSON datotekama: čitanje, pisanje i dodavanje

JSON predstavlja iznenađujuće praktičan i lagan format za pohranu podataka 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 prilično dugo vrijeme.

Pisanje JSON-a u datoteku obično je proces u dva koraka: serijalizirajte Python podatke pomoću json.dumps() ili direktno sa json.dump(), a zatim provjerite da li je rezultirajući niz zapisan na disk. Ako pozovete open('data.json', 'w'), u načinu pisanja dobijate deskriptor datoteke koji ili kreira 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 lista i rječnika se rekurzivno kodiraju. 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 režimu, proslijedi objekt datoteke json.load(), i dobijate nazad svoju Python strukturu podataka. Ponašanje je ponovo nezavisno od toga koliko duboko ugniježđivanje ide - dekoder to sve rješava umjesto vas.

Ako trebate dodati JSON podatke postojećim datotekama, Stvari postaju nijansiranije. Sam JSON ne podržava "streaming append" na trivijalan način jer cijela datoteka mora biti validan JSON. Uobičajeni obrazac je pohranjivanje niza zapisa i čitanje/modificiranje/pisanje cijelog niza ili korištenje JSON-a razdvojenog linijama gdje je svaka linija zaseban JSON objekt kojem možete dodati podatke bez prepisivanja prethodnih linija.

JSON u stvarnom svijetu: API-ji, pohrana i razmjena

Kada počnete graditi prave aplikacije, JSON brzo postaje vezivno tkivo. koji povezuje web klijente i servere, mikroservise i API-je trećih strana. Cijeni se i zbog svoje kompaktnosti 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 tereta, posebno u RESTful servisima. Python aplikacije obično koriste biblioteke poput requests za 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 logove, gdje ga njegova strukturirana, ključ-vrijednost priroda čini mnogo izražajnijim od običnog teksta, a istovremeno ostaje jednostavan u poređenju s potpunim bazama podataka. Sistemske komponente mogu dijeliti konfiguraciju putem JSON-a, a agregatori logova mogu parsirati JSON logove kako bi ih lakše filtrirali ili analizirali.

Još jedan veliki slučaj upotrebe je serijalizacija i deserijalizacija struktura podataka, pretvaranje kolekcija u memoriji u JSON stringove (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 uslovom da se pridržavate JSON-kompatibilnih tipova ili obezbijedite prilagođene enkodere.

Osim samog JSON-a, Python kod često zahtijeva konverziju 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 sistema, transformirati ga u listu rječnika, a zatim ga prikazati 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

Kada se osjećate ugodno s osnovnim čitanjem i pisanjem, Postoji mnoštvo malih, ali korisnih operacija koje možete izvršiti na JSON podacima kako biste poboljšali svoj tijek rada: formatiranje za čitljivost, izravnavanje ugniježđenih struktura, provjera da li je niz znakova zaista JSON i sortiranje podataka za konzistentna poređenja.

Lijep print sa json.dumps(..., indent=...) je prvi korak, što vam daje lijepo raspoređene hijerarhije koje olakšavaju uočavanje strukturnih problema na prvi pogled. Ovo je posebno korisno tokom otklanjanja grešaka ili prilikom dijeljenja primjera u dokumentaciji.

Spljoštavanje ugniježđenog JSON-a može olakšati obradu i analizu nakon obrade, posebno ako trebate pretvoriti podatke u tabelarni oblik poput CSV-a ili ih ubaciti u alate koji očekuju parove ključ-vrijednost umjesto duboko ugniježđenih objekata. Obično sami implementirate izravnavanje koristeći rekurziju ili iterativni obilazak rječnika i lista.

Validacija JSON-a se često svodi na pokušaj parsiranja i hvatanja izuzetaka, posebno ako samo provjeravate da li je niz sintaktički ispravan. Za rigoroznije provjere možete koristiti JSON Schemu i eksterne biblioteke, ali za mnoge slučajeve jednostavan try/except oko json.loads() je dovoljno.

Sortiranje JSON podataka po određenim vrijednostima ili ključevima može pomoći pri poređenju odgovora, generiranje stabilnih snimaka za testove ili jednostavno osiguravanje da su slični objekti grupirani zajedno. Možete sortirati osnovne Python liste i rječnike prije ispisa ili se osloniti na sort_keys=True kada je fokus na redoslijedu ključeva unutar objekata.

Obrada grešaka pri radu sa JSON-om

Čak i dobro strukturirani sistemi mogu naići na oštećen JSON ili neočekivane podatke, Dakle, robusna obrada grešaka oko parsiranja i kodiranja JSON-a je ključna. Python izražava ove probleme putem izuzetaka, a idiomatski način za njihovo rješavanje je umotavanje 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 imena svojstava ili zarezi na kraju. json modul će izazvati grešku dekodiranja (obično json.JSONDecodeError), koje možete uhvatiti i evidentirati ili pretvoriti u poruke prilagođene korisniku.

Na primjer, pokušaj parsiranja oštećenog niza znakova 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 vrsta poruke vam govori ne samo da parsiranje nije uspjelo, već i gdje je u ulazu došlo do zbunjenosti parsera.

Na strani kodiranja, mogli biste naići na TypeError prilikom pokušaja serijalizacije nepodržanih tipova, or ValueError ako ne dozvolite NaN i beskonačnosti putem allow_nan=False ali vaši podaci sadrže takve vrijednosti. Kružne reference u kontejnerima također mogu pokrenuti RecursionError ako onemogućite kružne provjere.

Najbolja praksa je tretirati JSON operacije kao pogrešne I/O operacije, posebno prilikom čitanja iz mrežnih izvora ili eksternih datoteka: uvijek pretpostavite da nešto može poći po zlu i shodno tome uhvatite izuzetke, eventualno dodajući slojeve validacije kako biste nametnuli specifičnija ograničenja na vaše podatke. Omotavanje json.loads() ili pomoćne API metode u try...except blokovi štite ostatak vašeg koda od kaskadnih grešaka i omogućavaju vam povratak korisnički prilagođene JSON greš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 će slati i primati JSON, a tipični razvojni paket kombinuje requests biblioteka (za HTTP) sa json modul (za parsiranje i generiranje JSON-a). Ova kombinacija čini da API integracija djeluje vrlo prirodno.

Uobičajeni obrazac je pozivanje API krajnje tačke, provjerite da li kod statusa odgovora pokazuje uspjeh, a zatim parsirati JSON tijeloOdatle možete pristupiti poljima, rukovati ugniježđenim podacima i mapirati odgovor u vlastite modele domena ili pregledati objekte.

Obrada grešaka postaje posebno važna kada su u pitanju mrežni pozivi, jer možete naići ne samo na nevažeći JSON, već i na isteke vremena, greške u povezivanju ili greške na strani servera koje odgovaraju HTML-om umjesto JSON-a. json.loads() ili pomoćne API metode 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, Dakle, sve tehnike o kojima se ranije raspravljalo - lijep ispis, izravnavanje, validacija, sortiranje - primjenjuju se direktno. Udobno prebacivanje između Python podataka i JSON-a predstavlja ogroman poticaj produktivnosti kada povezujete servise. Ako ste fokusirani na izgradnja stvarnih aplikacijaRano obraćanje pažnje na obrasce rukovanja JSON-om uštedjet će vrijeme za otklanjanje grešaka kasnije.

JSON u Pythonu se manje odnosi na poziv jedne funkcije, a više na skup alata: Jasna mapiranja tipova, fleksibilni parametri kodiranja, opcije 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.

Vezani članak:
Riješeno: dobiti podatke o web stranici kao json python
Slični postovi: