Python JSON: Kodiranje (istovar), dekodiranje (učitavanje) i čitanje JSON datoteke
U čemu je JSON Python?
JSON in Python je standardni format inspiriran JavaSkripta za razmjenu podataka i prijenos podataka u obliku teksta preko mreže. Općenito, JSON je u obliku niza ili teksta. Mogu ga koristiti API-ji i baze podataka, a objekte predstavlja kao parove ime/vrijednost. JSON je skraćenica za JavaNotacija objekta skripte.
Python JSON sintaksa:
JSON je napisan kao par ključa i vrijednosti.
{ "Key": "Value", "Key": "Value", }
JSON je vrlo sličan Python rječnik. Python podržava JSON i ima ugrađenu biblioteku kao JSON.
JSON knjižnica u Python
'maršal"I"kiseli krastavac' vanjski moduli od Python održavati verziju JSON Python knjižnica. Rad s JSON in Python da biste izvršili operacije povezane s JSON-om kao što su kodiranje i dekodiranje, prvo trebate uvoz JSON biblioteka i za to u vašem .py datoteka,
import json
Sljedeće metode dostupne su u JSON-u Python modul
način | Description |
---|---|
odlagališta () | kodiranje u JSON objekte |
istovariti() | zapis kodiranog niza u datoteku |
opterećenja () | Dekodirajte JSON niz |
opterećenje() | Dekodirajte tijekom čitanja JSON datoteke |
Python u JSON (kodiranje)
JSON Knjižnica od Python obavlja sljedeći prijevod Python objekte u JSON objekte prema zadanim postavkama
Python | JSON |
---|---|
diktat | Objekt |
popis | Poredak |
unicode | Niz |
broj – int, dug | broj – int |
plutati | broj – pravi |
Pravi | Pravi |
Lažan | Lažan |
nijedan | nula |
Pretvaranje Python podataka u JSON naziva se operacija kodiranja. Kodiranje se vrši uz pomoć metode JSON biblioteke – odlagališta ()
JSON dumps() in Python
json.dumps() in Python je metoda koja pretvara objekte rječnika Python u format podataka niza JSON. Korisno je kada se zahtijeva da objekti budu u formatu niza za operacije poput raščlanjivanja, ispisa itd.
Izvedimo sada naš prvi primjer kodiranja json.dumps s Python:
import json x = { "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}})
Pogledajmo primjer Python pisati JSON u datoteku za stvaranje JSON datoteke rječnika koristeći istu funkciju istovariti()
# here we create new data_file.json file with write mode using file i/o operation with open('json_file.json', "w") as file_write: # write json data into file json.dump(person_data, file_write)
Izlaz:
Ništa za prikazati…U vašem sustavu stvorena je json_file.json. Tu datoteku možete provjeriti kao što je prikazano u nastavku za pisanje JSON datoteke Python primjer.
JSON za Python (dekodiranje)
Dekodiranje JSON niza vrši se uz pomoć ugrađene metode json.loads() & json.load() JSON knjižnice u Python. Ovdje tablica prijevoda prikazuje primjer JSON objekata u Python predmeti koji su korisni za izvođenje dekodiranja Python JSON niza.
JSON | Python |
---|---|
Objekt | diktat |
Poredak | popis |
Niz | unicode |
broj – int | broj – int, dug |
broj – pravi | plutati |
Pravi | Pravi |
Lažan | Lažan |
nula | nijedan |
Pogledajmo osnovnu analizu JSON-a Python primjer dekodiranja uz pomoć json.učitava funkcija,
import json # json library imported # json data string person_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_obj print("Type of dict_obj", type(dict_obj)) # get human object details print("Person......", dict_obj.get('person'))
Izlaz:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}} Type of dict_obj <class 'dict'> Person...... {'name': 'John', 'sex': 'male'}
Dekodiranje JSON datoteke ili raščlanjivanje JSON datoteke u Python
Sada ćemo naučiti kako čitati JSON datoteku Python s Python raščlani JSON primjer:
NAPOMENA: Dekodiranje JSON datoteke je operacija vezana za ulaz/izlaz datoteke (I/O). JSON datoteka mora postojati na vašem sustavu na navedenoj lokaciji koju ste spomenuli u svom programu.
Python čitanje JSON datoteke Primjer:
import json #File I/O Open function for read data from JSON File with open('X:/json_file.json') as file_object: # store file data in object data = json.load(file_object) print(data)
Evo podataka je rječnički objekt od Python kao što je prikazano u gornjoj pročitanoj JSON datoteci Python primjer.
Izlaz:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Kompaktno kodiranje u Python
Kada trebate smanjiti veličinu svoje JSON datoteke, možete upotrijebiti kompaktno kodiranje Python.
Primjer,
import json # Create a List that contains dictionary lst = ['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 dictionary compact_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 **
Format JSON koda (lijepi ispis)
- Cilj je napisati dobro formatiran kod za ljudsko razumijevanje. Uz pomoć lijepog ispisa, svatko može lako razumjeti kôd.
Primjer:
import json dic = { '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 ovo bolje razumjeli, promijenite uvlaku na 40 i promatrajte izlaz-
Naručivanje JSON koda:
sort_ključevi atribut u Python argument funkcije dumps poredat će ključ u JSON-u uzlaznim redoslijedom. Argument sort_keys je Booleov atribut. Ako je istina, sortiranje je dopušteno, inače nije. Da se razumijemo sa Python primjer sortiranja niza u JSON.
Primjer,
import json x = { "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 vidjeti, starost ključeva, automobili, djeca itd. poredani su uzlaznim redoslijedom.
Kodiranje kompleksnog objekta Python
Složeni objekt ima dva različita dijela tj
- Pravi dio
- Imaginarni dio
Primjer: 3 +2i
Prije izvođenja kodiranja složenog objekta, trebate provjeriti je li varijabla složena ili ne. Morate izraditi funkciju koja provjerava vrijednost pohranjenu u varijabli pomoću metode instance.
Stvorimo posebnu funkciju za provjeru je li objekt složen ili podoban za kodiranje.
import json # create function to check instance is complex or not def complex_encode(object): # check using isinstance method if isinstance(object, complex): return [object.real, object.imag] # raised error using exception handling if object is not complex raise TypeError(repr(object) + " is not JSON serialized") # perform json encoding by passing parameter complex_obj = json.dumps(4 + 5j, default=complex_encode) print(complex_obj)
Izlaz:
'[4.0, 5.0]'
Dekodiranje kompleksnog JSON objekta u Python
Za dekodiranje složenog objekta u JSON-u upotrijebite parametar object_hook koji provjerava sadrži li niz JSON složeni objekt ili ne. Razumimo s nizom u JSON Python Primjer,
import json # function check JSON string contains complex object def 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 not complex_object =json.loads('{"__complex__": true, "real": 4, "img": 5}', object_hook = is_complex) #here we not passed complex object so it's convert into dictionary simple_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 klase JSON serijalizacije JSONEncoder
Klasa JSONEncoder koristi se za serijalizaciju bilo kojeg Python objekt tijekom izvođenja kodiranja. Sadrži tri različite metode kodiranja koje su
- zadano(o) – Implementirano u podklasu i vraća objekt serijalizacije za o objekt.
- kodirati(o) – Isto kao i JSON ispisi Python metoda vraća JSON niz od Python struktura podataka.
- iterencode(o) – Predstavite niz jedan po jedan i kodirajte objekt o.
Uz pomoć metode encode() klase JSONEncoder također možemo kodirati bilo koji Python objekt kao što je prikazano u nastavku Python Primjer JSON kodera.
# import JSONEncoder class from json from json.encoder import JSONEncoder colour_dict = { "colour": ["red", "yellow", "green" ]} # directly called encode method of JSON JSONEncoder().encode(colour_dict)
Izlaz:
'{"colour": ["red", "yellow", "green"]}'
Pregled JSON Deserialization klase JSONDecoder
Klasa JSONDecoder koristi se za deserijalizaciju bilo kojeg Python objekt tijekom izvođenja dekodiranja. Sadrži tri različite metode dekodiranja koje su
- zadano(o) – Implementiran u podklasu i vraća deserijalizirani objekt o objekt.
- dekodirati(o) – Isto kao povrat metode json.loads(). Python struktura podataka JSON niza ili podataka.
- sirovo_dekodiranje(o) – Zastupati Python rječnik jedan po jedan i dekodirati objekt o.
Uz pomoć metode decode() klase JSONDecoder, također možemo dekodirati JSON niz kao što je prikazano u nastavku Python Primjer JSON dekodera.
import json # import JSONDecoder class from json from json.decoder import JSONDecoder colour_string = '{ "colour": ["red", "yellow"]}' # directly called decode method of JSON JSONDecoder().decode(colour_string)
Izlaz:
{'colour': ['red', 'yellow']}
Dekodiranje JSON podataka iz URL-a: primjer iz stvarnog života
Dohvatit ćemo podatke o CityBike NYC (Bike Sharing System) s navedenog URL-a(https://gbfs.citibikenyc.com/gbfs/2.3/gbfs.json) i pretvoriti u format rječnika.
Python učitaj JSON iz datoteke Primjer:
NAPOMENA:- Provjerite je li biblioteka zahtjeva već instalirana u vašem Python, Ako ne, otvorite Terminal ili CMD i upišite
- (Za Python 3 ili noviji) pip3 instalacijski zahtjevi
import json import requests # get JSON string data from CityBike NYC using web requests library json_response= requests.get("https://gbfs.citibikenyc.com/gbfs/2.3/gbfs.json") # check type of json_response object print(type(json_response.text)) # load data in loads() function of json library bike_dict = json.loads(json_response.text) #check type of news_dict print(type(bike_dict)) # now get stationBeanList key data from dict print(bike_dict['stationBeanList'][0])
Izlaz:
<class 'str'> <class 'dict'> { '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 bibliotekom u Python:
- Klasa json.JSONDecoderError obrađuje iznimke povezane s operacijom dekodiranja. i to je podklasa od ValueError.
- Iznimka – json.JSONDecoderError(msg, doc)
- Parametri iznimke su,
- msg – Neformatirana poruka o pogrešci
- doc – JSON dokumenti raščlanjeni
- pos – početni indeks dokumenta kada je neuspješan
- lineno – linija bez emisija odgovara poz
- dvotočka – stupac ne odgovara poz
Python učitaj JSON iz datoteke Primjer:
import json #File I/O Open function for read data from JSON File data = {} #Define Empty Dictionary Object try: 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čno i NaN Numbers in Python
Format za razmjenu podataka JSON (RFC – zahtjev za komentare) ne dopušta beskonačnu ili nan vrijednost, ali nema ograničenja u Python- Knjižnica JSON za izvođenje operacija vezanih uz Infinite i Nan vrijednost. Ako JSON dobije INFINITE i Nan tip podataka onda ga pretvara u literal.
Primjer,
import json # pass float Infinite value infinite_json = json.dumps(float('inf')) # check infinite json type print(infinite_json) print(type(infinite_json)) json_nan = json.dumps(float('nan')) print(json_nan) # pass json_string as Infinity infinite = json.loads('Infinity') print(infinite) # check type of Infinity print(type(infinite))
Izlaz:
Infinity <class 'str'> NaN inf <class 'float'>
Ponovljeni ključ u nizu JSON
RFC navodi da naziv ključa treba biti jedinstven u JSON objektu, ali nije obavezan. Python Knjižnica JSON ne pokreće iznimku ponovljenih objekata u JSON-u. Zanemaruje sve ponovljene parove ključ-vrijednost i uzima u obzir samo posljednji par ključ-vrijednost među njima.
- Primjer,
import json repeat_pair = '{"a": 1, "a": 2, "a": 3}' json.loads(repeat_pair)
Izlaz:
{'a': 3}
CLI (sučelje naredbenog retka) s JSON in Python
json.alat pruža sučelje naredbenog retka za provjeru JSON sintakse lijepog ispisa. Pogledajmo primjer CLI-ja
$ echo '{"name" : "Kings Authur" }' | python3 -m json.tool
Izlaz:
{ "name": " Kings Authur " }
Prednosti JSON in Python
- Lako se vraćati između spremnika i vrijednosti (JSON to Python i Python u JSON)
- Čovjeku čitljiv (pretty-print) JSON objekt
- Široko korišten u rukovanju podacima.
- Nema istu strukturu podataka u jednoj datoteci.
Ograničenja implementacije JSON-a u Python
- U deserializatoru JSON raspona i predviđanja broja
- Maksimalna duljina JSON niza i polja JSON i razine ugniježđenja objekta.
Python JSON Cheat Sheet
Python JSON funkcija | Description |
---|---|
json.dumps(person_data) | Stvorite JSON objekt |
json.dump(person_data, file_write) | Stvorite JSON datoteku koristeći File I/O of Python |
compact_obj = json.dumps(podaci, separatori=(',',':')) | Sažimanje JSON objekta uklanjanjem razmaka iz JSON objekta pomoću separatora |
formatted_obj = json.dumps(dic, indent=4, separators=(',', ': ')) | Formatiranje JSON koda pomoću uvlake |
sorted_string = json.dumps(x, indent=4, sort_keys=True) | Sortiranje JSON ključa objekta po abecednom redu |
complex_obj = json.dumps(4 + 5j, default=complex_encode) | Python Kodiranje složenih objekata u JSON |
JSONEncoder().encode(colour_dict) | Upotreba JSONEncoder klase za serijalizaciju |
json.loads(data_string) | Dekodiranje JSON niza u Python rječnik 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().decode(colour_string) | Upotreba dekodiranja JSON u Python s deserijalizacijom |