Što je JSON?
JSON je standardni format za razmjenu podataka, nadahnut JavaScriptom. Općenito, JSON je u formatu niza ili teksta. JSON označuje J Ava S cript O bject N otation.
Sintaksa JSON: JSON zapisan je kao par ključ i vrijednost.
{"Key": "Value","Key": "Value",}
JSON je vrlo sličan rječniku Python. Python podržava JSON i ima ugrađenu knjižnicu kao JSON.
JSON knjižnica u Pythonu
' marshal ' i ' pickle' vanjski moduli Pythona održavaju verziju JSON knjižnice. Da biste izvršili operacije povezane s JSON-om poput kodiranja i dekodiranja u Pythonu, prvo morate uvesti JSON-knjižnicu, a za to u svoju .py datoteku,
import json
Sljedeće su metode dostupne u JSON modulu
Metoda | Opis |
---|---|
odlagališta () | kodiranje u JSON objekte |
istovariti() | kodirano pisanje niza u datoteku |
opterećenja () | Dekodirajte JSON niz |
opterećenje() | Dekodiraj dok je datoteka JSON čitana |
Python u JSON (kodiranje)
JSON knjižnica Pythona prema zadanim postavkama izvodi slijedeći prijevod Python objekata u JSON objekte
Piton | JSON |
diktat | Objekt |
popis | Polje |
unicode | Niz |
broj - int, dugačak | broj - međ |
plutati | broj - stvaran |
Pravi | Pravi |
Lažno | Lažno |
Nijedna | Nula |
Pretvaranje Python podataka u JSON naziva se operacija kodiranja. Kodiranje se vrši uz pomoć JSON metode knjižnice - dumps ()
dumps () metoda pretvara rječnički objekt pythona u JSON format podataka niza.
Sada dopuštamo da izvedemo svoj prvi primjer kodiranja s Pythonom.
import jsonx = {"name": "Ken","age": 45,"married": True,"children": ("Alice","Bob"),"pets": ['Dog'],"cars": [{"model": "Audi A1", "mpg": 15.1},{"model": "Zeep Compass", "mpg": 18.1}]}# sorting result in asscending order by keys:sorted_string = json.dumps(x, indent=4, sort_keys=True)print(sorted_string)
Izlaz:
{"person": {"name": "Kenn", "sex": "male", "age": 28}})
Stvorimo JSON datoteku rječnika koristeći istu funkciju dump ()
# here we create new data_file.json file with write mode using file i/o operationwith open('json_file.json', "w") as file_write:# write json data into filejson.dump(person_data, file_write)
Izlaz:
Ništa za pokazati
... U vašem sustavu json_file.json je stvoren, možete provjeriti tu datoteku.JSON u Python (dekodiranje)
JSON niz dekodiranje je učinjeno uz pomoć ugrađene metode opterećenja () i opterećenje () u JSON knjižnice u Pythonu. Ovdje tablica prijevoda prikazuje primjer JSON objekata na Python objekte koji su korisni za izvršavanje dekodiranja u Pythonu JSON niza.
JSON | Piton |
Objekt | diktat |
Polje | popis |
Niz | unicode |
broj - međ | broj - int, dugačak |
broj - stvaran | plutati |
Pravi | Pravi |
Lažno | Lažno |
Nula | Nijedna |
Pogledajmo osnovni primjer dekodiranja u Pythonu uz pomoć funkcije json.loads () ,
import json # json library imported# json data stringperson_data = '{ "person": { "name": "Kenn", "sex": "male", "age": 28}}'# Decoding or converting JSON format in dictionary using loads()dict_obj = json.loads(person_data)print(dict_obj)# check type of dict_objprint("Type of dict_obj", type(dict_obj))# get human object detailsprint("Person… ", dict_obj.get('person'))
Izlaz:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}Type of dict_objPerson… {'name': 'John', 'sex': 'male'}
Dekodiranje JSON datoteke ili raščlanjivanje JSON datoteke u Pythonu
NAPOMENA: Dekodiranje JSON datoteke odnosi se na unos / izlaz datoteke (I / O). JSON datoteka mora postojati u vašem sustavu na određenom mjestu koje spominjete u svom programu.
Primjer,
import json#File I/O Open function for read data from JSON Filewith open('X:/json_file.json') as file_object:# store file data in objectdata = json.load(file_object)print(data)
Ovdje su podaci rječnički objekt Pythona.
Izlaz:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Kompaktno kodiranje u Pythonu
Kada trebate smanjiti veličinu JSON datoteke, možete koristiti kompaktno kodiranje u Pythonu.
Primjer,
import json# Create a List that contains dictionarylst = ['a', 'b', 'c',{'4': 5, '6': 7}]# separator used for compact representation of JSON.# Use of ',' to identify list items# Use of ':' to identify key and value in dictionarycompact_obj = json.dumps(lst, separators=(',', ':'))print(compact_obj)
Izlaz:
'["a", "b", "c", {"4": 5, "6": 7}]'** Here output of JSON is represented in a single line which is the most compact representation by removing the space character from compact_obj **
Formatiranje JSON koda (lijepi ispis)
- Cilj je napisati dobro oblikovan kôd za ljudsko razumijevanje. Uz pomoć lijepog ispisa, svatko može lako razumjeti kôd.
- Primjer,
import jsondic = { 'a': 4, 'b': 5 }''' To format the code use of indent and 4 shows number of space and use of separator is not necessary but standard way to write code of particular function. '''formatted_obj = json.dumps(dic, indent=4, separators=(',', ': '))print(formatted_obj)
Izlaz:
{"a" : 4,"b" : 5}
Da biste to bolje razumjeli, promijenite uvlaku na 40 i promatrajte izlaz-
Naručivanje JSON koda:
atribut sort_keys u dumps () argumentu funkcije sortirat će ključ u JSON-u u rastućem redoslijedu. Argument sort_keys je logički atribut. Kada je istina sortiranje je dozvoljeno, inače ne
Primjer,
import jsonx = {"name": "Ken","age": 45,"married": True,"children": ("Alice", "Bob"),"pets": [ 'Dog' ],"cars": [{"model": "Audi A1", "mpg": 15.1},{"model": "Zeep Compass", "mpg": 18.1}],}# sorting result in asscending order by keys:sorted_string = json.dumps(x, indent=4, sort_keys=True)print(sorted_string)
Izlaz:
{"age": 45,"cars": [ {"model": "Audi A1","mpg": 15.1},{"model": "Zeep Compass","mpg": 18.1}],"children": [ "Alice","Bob"],"married": true,"name": "Ken","pets": ["Dog"]}
Kao što možete primijetiti, tipke starosti, automobili, djeca itd. Raspoređeni su u rastućem redoslijedu.
Složeno objektno kodiranje Pythona
Složeni objekt ima dva različita dijela tj
- Pravi dio
- Zamišljeni dio
Primjer: 3 + 2i
Prije izvođenja kodiranja složenog objekta, morate provjeriti je li varijabla složena ili ne. Morate stvoriti funkciju koja provjerava vrijednost pohranjenu u varijabli pomoću metode instance.
Stvorimo specifičnu funkciju za objekt provjere složen je ili podoban za kodiranje.
import json# create function to check instance is complex or notdef complex_encode(object):# check using isinstance methodif isinstance(object, complex):return [object.real, object.imag]# raised error using exception handling if object is not complexraise TypeError(repr(object) + " is not JSON serialized")# perform json encoding by passing parametercomplex_obj = json.dumps(4 + 5j, default=complex_encode)print(complex_obj)
Izlaz:
'[4.0, 5.0]'
Složeno JSON dekodiranje objekata u Pythonu
Za dekodiranje složenog objekta u JSON-u koristite parametar object_hook koji provjerava sadrži li JSON niz složeni objekt ili ne. Primjer,
import json# function check JSON string contains complex objectdef is_complex(objct):if '__complex__' in objct:return complex(objct['real'], objct['img'])return objct# use of json loads method with object_hook for check object complex or notcomplex_object =json.loads('{"__complex__": true, "real": 4, "img": 5}', object_hook = is_complex)#here we not passed complex object so it's convert into dictionarysimple_object =json.loads('{"real": 6, "img": 7}', object_hook = is_complex)print("Complex_object… ",complex_object)print("Without_complex_object… ",simple_object)
Izlaz:
Complex_object… (4+5j)Without_complex_object… {'real': 6, 'img': 7}
Pregled JSON klase serializacije JSONEncoder
Klasa JSONEncoder koristi se za serializaciju bilo kojeg Python objekta tijekom izvođenja kodiranja. Sadrži tri različite metode kodiranja koje su
- zadani (o) - Implementirano u podrazredu i vraća serializiranje objekta za o objekt.
- encode (o) - Isto kao i metoda json.dumps () vraća JSON niz Python strukture podataka.
- iterencode (o) - predstavljaju niz jedan po jedan i kodiraju objekt o.
Uz pomoć metode encode () klase JSONEncoder, također možemo kodirati bilo koji Python objekt.
# import JSONEncoder class from jsonfrom json.encoder import JSONEncodercolour_dict = { "colour": ["red", "yellow", "green" ]}# directly called encode method of JSONJSONEncoder().encode(colour_dict)
Izlaz:
'{"colour": ["red", "yellow", "green"]}'
Pregled JSON klase deserijalizacije JSONDecoder
Klasa JSONDecoder koristi se za deserializaciju bilo kojeg Python objekta tijekom izvođenja dekodiranja. Sadrži tri različite metode dekodiranja koje su
- zadani (o) - Implementirano u podrazred i vraća deserijalizirani objekt o objekt.
- decode (o) - Isto kao i metoda json.loads () vraća Python strukturu podataka JSON niza ili podataka.
- raw_decode (o) - predstavljaju Python rječnik jedan po jedan i dekodiraju objekt o.
Uz pomoć metode decode () klase JSONDecoder, također možemo dekodirati JSON niz.
import json# import JSONDecoder class from jsonfrom json.decoder import JSONDecodercolour_string = '{ "colour": ["red", "yellow"]}'# directly called decode method of JSONJSONDecoder().decode(colour_string)
Izlaz:
{'colour': ['red', 'yellow']}
Dekodiranje JSON podataka iz URL-a: Primjer iz stvarnog života
Dohvatit ćemo podatke CityBike NYC (Bike Sharing System) s navedenog URL-a (https://feeds.citibikenyc.com/stations/stations.json) i pretvoriti u format rječnika.
Primjer,
NAPOMENA: - Provjerite je li knjižnica zahtjeva već instalirana u vašem Pythonu. Ako nije, otvorite Terminal ili CMD i upišite
- (Za Python 3 ili noviji) pip3 zahtjevi za instalaciju
import jsonimport requests# get JSON string data from CityBike NYC using web requests libraryjson_response= requests.get("https://feeds.citibikenyc.com/stations/stations.json")# check type of json_response objectprint(type(json_response.text))# load data in loads() function of json librarybike_dict = json.loads(json_response.text)#check type of news_dictprint(type(bike_dict))# now get stationBeanList key data from dictprint(bike_dict['stationBeanList'][0])
Izlaz:
{'id': 487,'stationName': 'E 20 St & FDR Drive','availableDocks': 24,'totalDocks': 34,'latitude': 40.73314259,'longitude': -73.97573881,'statusValue': 'In Service','statusKey': 1,'availableBikes': 9,'stAddress1': 'E 20 St & FDR Drive','stAddress2': '','city': '','postalCode': '','location': '','altitude': '','testStation': False,'lastCommunicationTime': '2018-12-11 10:59:09 PM', 'landMark': ''}
Iznimke povezane s JSON knjižnicom u Pythonu:
- Klasa json.JSONDecoderError obrađuje iznimku povezanu s operacijom dekodiranja. i to je podrazred ValueError.
- Iznimka - json.JSONDecoderError (msg, doc)
- Parametri iznimke su,
- msg - Neformatirana poruka o pogrešci
- doc - JSON dokumenti raščlanjeni
- pos - start indeks dok. dok ne uspije
- lineno - linija nema emisija koje odgovaraju poz
- debelo crijevo - stupac ne odgovara poz
Primjer,
import json#File I/O Open function for read data from JSON Filedata = {} #Define Empty Dictionary Objecttry:with open('json_file_name.json') as file_object:data = json.load(file_object)except ValueError:print("Bad JSON file format, Change JSON File")
Beskonačni i NaN brojevi u Pythonu
JSON format razmjene podataka (RFC - Zahtjev za komentare) ne dopušta beskonačnu ili Nan vrijednost, ali u Python-JSON knjižnici nema ograničenja za obavljanje beskonačne i Nan vrijednosti. Ako JSON dobije INFINITE i Nan tip podataka, pretvorio ga je u doslovni.
Primjer,
import json# pass float Infinite valueinfinite_json = json.dumps(float('inf'))# check infinite json typeprint(infinite_json)print(type(infinite_json))json_nan = json.dumps(float('nan'))print(json_nan)# pass json_string as Infinityinfinite = json.loads('Infinity')print(infinite)# check type of Infinityprint(type(infinite))
Izlaz:
InfinityNaNinf
Ponovljeni ključ u JSON nizu
RFC navodi da bi naziv ključa trebao biti jedinstven u JSON objektu, ali nije obvezan. Python JSON knjižnica ne pokreće iznimku ponavljanih objekata u JSON-u. Zanemaruje sve ponovljene parove ključ / vrijednost i uzima u obzir samo posljednji par ključ / vrijednost.
- Primjer,
import jsonrepeat_pair = '{"a": 1, "a": 2, "a": 3}'json.loads(repeat_pair)
Izlaz:
{'a': 3}
CLI (sučelje naredbenog retka) s JSON-om u Pythonu
json.tool pruža sučelje naredbenog retka za provjeru sintakse JSON-a s lijepim ispisom. Pogledajmo primjer CLI-a
$ echo '{"name" : "Kings Authur" }' | python3 -m json.tool
Izlaz:
{"name": " Kings Authur "}
Prednosti JSON-a u Pythonu
- Jednostavno vraćanje između spremnika i vrijednosti (JSON na Python i Python na JSON)
- Čovjeku čitljiv (prilično ispisan) JSON objekt
- Široko se koristi u rukovanju podacima.
- Nema istu strukturu podataka u jednoj datoteci.
Ograničenje implementacije JSON-a u Pythonu
- U deserializatoru raspona JSON i predviđanju broja
- Maksimalna duljina JSON niza i nizova JSON-a i razine ugniježđenja objekta.
Šifra za varanje
json.dumps (person_data) |
Stvorite JSON objekt |
json.dump (person_data, file_write) |
Stvorite JSON datoteku koristeći I / O datoteke Pythona |
compact_obj = json.dumps (podaci, separatori = (',', ':')) |
Kompaktni JSON objekt uklanjanjem razmaka iz JSON objekta pomoću separatora |
formatted_obj = json.dumps (dic, uvlaka = 4, odvajači = (',', ':')) |
Oblikovanje JSON koda pomoću uvlačenja |
sorted_string = json.dumps (x, uvlaka = 4, sort_keys = True) |
Sortiranje ključa objekta JSON po abecednom redu |
complex_obj = json.dumps (4 + 5j, zadano = complex_encode) |
Kodiranje složenih objekata Pythona u JSON-u |
JSONEncoder (). Kodiraj (boja_dict) |
Korištenje klase JSONEncoder za serializaciju |
json.loads (data_string) |
Dekodiranje JSON niza u rječniku Python pomoću funkcije json.loads () |
json.loads ('{"__ complex__": true, "real": 4, "img": 5}', object_hook = is_complex) |
Dekodiranje složenog JSON objekta u Python |
JSONDecoder (). Dekodiranje (niz_boje) |
Korištenje dekodiranja JSON-a na Python s deserijalizacijom |