Čo je to JSON?
JSON je štandardný formát na výmenu údajov, ktorý je inšpirovaný jazykom JavaScript. Všeobecne je formát JSON v textovom alebo textovom formáte. JSON znamená J ava S Cripta O bject N otation.
Syntax JSON: JSON je zapísaná ako pár kľúča a hodnoty.
{"Key": "Value","Key": "Value",}
JSON je veľmi podobný slovníku Python. Python podporuje JSON a má zabudovanú knižnicu ako JSON.
Knižnica JSON v Pythone
' maršal ' a ' nakladanie' externých modulov Pythonu udržiava verziu knižnice JSON . Ak chcete vykonávať operácie spojené s JSON, ako je kódovanie a dekódovanie v Pythone, musíte najskôr importovať knižnicu JSON a to do svojho súboru .py ,
import json
V module JSON sú k dispozícii nasledujúce metódy
Metóda | Popis |
---|---|
skládky () | kódovanie do objektov JSON |
výpis () | kódovaný reťazec zapisujúci do súboru |
zaťaženia () | Dekódujte reťazec JSON |
naložiť() | Dekódujte pri načítaní súboru JSON |
Python to JSON (kódovanie)
Knižnica JSON v Pythone štandardne vykonáva nasledujúci preklad objektov Pythonu do objektov JSON
Python | JSON |
diktát | Objekt |
zoznam | Pole |
unicode | String |
číslo - int, dlhé | číslo - int |
plavák | číslo - skutočné |
Pravdaže | Pravdaže |
Falošné | Falošné |
Žiadne | Nulový |
Konverzia dát Pythonu na JSON sa nazýva operácia kódovania. Kódovanie sa vykonáva pomocou metódy knižnice JSON - dumps ()
metóda dumps () prevádza slovníkový objekt pythonu na dátový formát reťazca JSON.
Teraz môžeme vykonať náš prvý príklad kódovania v Pythone.
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)
Výkon:
{"person": {"name": "Kenn", "sex": "male", "age": 28}})
Vytvorme súbor JSON slovníka pomocou rovnakej funkcie 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)
Výkon:
Niet čo ukázať
... Vo vašom systéme je vytvorený súbor json_file.json, ktorý môžete skontrolovať.JSON - Python (dekódovanie)
Dekódovanie reťazec JSON sa vykonáva pomocou vstavanej metódy zaťaženie () a load () z JSON knižnice v Pythone. Tu prekladová tabuľka zobrazuje príklad objektov JSON na objekty Pythonu, ktoré sú užitočné pri vykonávaní dekódovania reťazca JSON v Pythone.
JSON | Python |
Objekt | diktát |
Pole | zoznam |
String | unicode |
číslo - int | číslo - int, dlhé |
číslo - skutočné | plavák |
Pravdaže | Pravdaže |
Falošné | Falošné |
Nulový | Žiadne |
Pozrime sa na základný príklad dekódovania v Pythone pomocou funkcie 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'))
Výkon:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}Type of dict_objPerson… {'name': 'John', 'sex': 'male'}
Dekódovanie súboru JSON alebo analýza súboru JSON v Pythone
POZNÁMKA: Dekódovanie súboru JSON súvisí s operáciou File Input / Output (I / O). Súbor JSON musí existovať vo vašom systéme na zadanom mieste, ktoré ste spomenuli vo svojom programe.
Príklad,
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)
Dáta sú slovníkovým objektom Pythonu.
Výkon:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Kompaktné kódovanie v Pythone
Ak potrebujete zmenšiť veľkosť svojho súboru JSON, môžete v Pythone použiť kompaktné kódovanie.
Príklad,
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)
Výkon:
'["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 **
Formátovať kód JSON (pekná tlač)
- Cieľom je napísať dobre naformátovaný kód pre ľudské porozumenie. Pomocou peknej tlače môže kód každý ľahko pochopiť.
- Príklad,
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)
Výkon:
{"a" : 4,"b" : 5}
Aby ste tomu lepšie porozumeli, zmeňte odsadenie na 40 a sledujte výstup
Objednávanie kódu JSON:
Atribút sort_keys v argumente funkcie dumps () zoradí kľúč v JSON vzostupne. Argument sort_keys je boolovský atribút. Ak je to pravda, triedenie je povolené, inak nie
Príklad,
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)
Výkon:
{"age": 45,"cars": [ {"model": "Audi A1","mpg": 15.1},{"model": "Zeep Compass","mpg": 18.1}],"children": [ "Alice","Bob"],"married": true,"name": "Ken","pets": ["Dog"]}
Ako môžete pozorovať vek kľúčov, autá, deti atď. Sú zoradené vzostupne.
Komplexné kódovanie objektov Pythonu
Komplexný objekt má dve rôzne časti
- Skutočná časť
- Imaginárna časť
Príklad: 3 + 2i
Pred vykonaním kódovania zložitého objektu musíte skontrolovať, či je premenná zložitá alebo nie. Musíte vytvoriť funkciu, ktorá skontroluje hodnotu uloženú v premennej pomocou inštančnej metódy.
Vytvorme konkrétnu funkciu pre kontrolný objekt, ktorý je zložitý alebo vhodný na kódovanie.
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)
Výkon:
'[4.0, 5.0]'
Komplexné dekódovanie objektov JSON v Pythone
Na dekódovanie zložitého objektu v JSON použite parameter object_hook, ktorý kontroluje, či reťazec JSON obsahuje komplexný objekt alebo nie. Príklad,
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)
Výkon:
Complex_object… (4+5j)Without_complex_object… {'real': 6, 'img': 7}
Prehľad triedy serializácie JSON JSONEncoder
Trieda JSONEncoder sa používa na serializáciu ľubovoľného objektu Python počas kódovania. Obsahuje tri rôzne spôsoby kódovania, ktoré sú
- default (o) - Implementované v podtriede a vrátiť serializovaný objekt pre o objekt.
- encode (o) - Rovnako ako metóda json.dumps () vráti reťazec JSON dátovej štruktúry Pythonu.
- iterencode (o) - predstavuje reťazec jeden po druhom a kóduje objekt o.
Pomocou metódy encode () triedy JSONEncoder môžeme tiež kódovať akýkoľvek objekt Pythonu.
# import JSONEncoder class from jsonfrom json.encoder import JSONEncodercolour_dict = { "colour": ["red", "yellow", "green" ]}# directly called encode method of JSONJSONEncoder().encode(colour_dict)
Výkon:
'{"colour": ["red", "yellow", "green"]}'
Prehľad triedy desonializácie JSON JSONDecoder
Trieda JSONDecoder sa používa na deserializáciu ľubovoľného objektu Pythonu pri vykonávaní dekódovania. Obsahuje tri rôzne spôsoby dekódovania, ktoré sú
- default (o) - Implementované v podtriede a vrátiť deserializovaný objekt o objekt.
- decode (o) - Rovnako ako metóda json.loads () vráti dátovú štruktúru Pythonu reťazca alebo údajov JSON.
- raw_decode (o) - predstavuje jeden po druhom slovník Pythonu a dekóduje objekt o.
Pomocou metódy decode () triedy JSONDecoder môžeme dekódovať aj reťazec JSON.
import json# import JSONDecoder class from jsonfrom json.decoder import JSONDecodercolour_string = '{ "colour": ["red", "yellow"]}'# directly called decode method of JSONJSONDecoder().decode(colour_string)
Výkon:
{'colour': ['red', 'yellow']}
Dekódovanie údajov JSON z adresy URL: príklad z reálneho života
Z vybranej adresy URL (https://feeds.citibikenyc.com/stations/stations.json) načítame údaje CityBike NYC (systém zdieľania bicyklov) a prevedieme ich do slovníka.
Príklad,
POZNÁMKA: - Uistite sa, že knižnica požiadaviek je už nainštalovaná vo vašom Pythone. Ak nie, otvorte Terminal alebo CMD a zadajte
- (Pre Python 3 alebo novší) požiadavky na inštaláciu pip3
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])
Výkon:
{'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': ''}
Výnimky týkajúce sa knižnice JSON v Pythone:
- Trieda json.JSONDecoderError spracuje výnimku súvisiacu s operáciou dekódovania. a je to podtrieda ValueError.
- Výnimka - json.JSONDecoderError (msg, doc)
- Parametre výnimky sú,
- msg - Neformátovaná chybová správa
- doc - analyzované dokumenty JSON
- pos - spustenie indexu dokumentu, keď zlyhá
- lineno - riadok bez relácií zodpovedá poz
- dvojbodka - stĺpec č. nezodpovedá poz
Príklad,
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")
Nekonečné a NaN čísla v Pythone
Formát výmeny údajov JSON (RFC - žiadosť o komentáre) neumožňuje hodnotu nekonečného alebo nanového rozsahu, ale v knižnici Python-JSON nie je žiadne obmedzenie vykonávať operáciu súvisiacu s hodnotou nekonečného a nanového množstva. Ak JSON získa dátový typ INFINITE a Nan, prevedie sa ho do doslovného tvaru.
Príklad,
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))
Výkon:
InfinityNaNinf
Opakovaný kľúč v reťazci JSON
RFC určuje, že názov kľúča by mal byť v objekte JSON jedinečný, ale nie je to povinné. Knižnica JSON v Pythone nevyvoláva výnimku opakovaných objektov v JSON. Ignoruje všetky opakované páry kľúč - hodnota a berie do úvahy iba posledný pár kľúč - hodnota.
- Príklad,
import jsonrepeat_pair = '{"a": 1, "a": 2, "a": 3}'json.loads(repeat_pair)
Výkon:
{'a': 3}
CLI (Command Line Interface) s JSON v Pythone
json.tool poskytuje rozhranie príkazového riadku na overenie syntaxe peknej tlače JSON. Pozrime sa na príklad CLI
$ echo '{"name" : "Kings Authur" }' | python3 -m json.tool
Výkon:
{"name": " Kings Authur "}
Výhody JSON v Pythone
- Ľahký presun späť medzi kontajnerom a hodnotou (JSON pre Python a Python pre JSON)
- Ľudsky čitateľný (pekná tlač) objekt JSON
- Široko používaný pri spracovaní údajov.
- V jednom súbore nemá rovnakú štruktúru údajov.
Obmedzenie implementácie JSON v Pythone
- V deserializátore rozsahu JSON a predikcii čísla
- Maximálna dĺžka reťazca JSON a polia JSON a úrovne vnorenia objektu.
Cheat Code
json.dumps (person_data) |
Vytvorte objekt JSON |
json.dump (person_data, file_write) |
Vytvorte súbor JSON pomocou File I / O v Pythone |
compact_obj = json.dumps (data, separators = (',', ':')) |
Kompaktný objekt JSON odstránením znaku medzery z objektu JSON pomocou oddeľovača |
formatted_obj = json.dumps (dic, indent = 4, separators = (',', ':')) |
Formátovanie kódu JSON pomocou odsadenia |
triedený_reťazec = json.dumps (x, odsadenie = 4, radiace_klíče = pravda) |
Triedenie kľúča objektu JSON podľa abecedného poradia |
complex_obj = json.dumps (4 + 5j, predvolené = komplexný_kód) |
Komplexné kódovanie objektov Python v JSON |
JSONEncoder (). Encode (colour_dict) |
Použitie triedy JSONEncoder na serializáciu |
json.loads (dátový_reťazec) |
Dekódovanie reťazca JSON v slovníku Python pomocou funkcie json.loads () |
json.loads ('{"__ complex__": true, "real": 4, "img": 5}', object_hook = is_complex) |
Dekódovanie zložitého objektu JSON do Pythonu |
JSONDecoder (). Decode (colour_string) |
Použitie dekódovania JSON na Python s deserializáciou |