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 sa 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 |








