Python JSON: kodeerige (väljavõtted), dekodeerige (laadib) ja lugege JSON-faili
Milles on JSON? Python?
JSON in Python on standardformaat, mis on inspireeritud JavaSkript andmevahetuseks ja andmeedastuseks tekstivormingus üle võrgu. Üldiselt on JSON stringi- või tekstivormingus. Seda saavad kasutada API-d ja andmebaasid ning see esindab objekte nime/väärtuse paaridena. JSON tähistab JavaSkripti objekti märkimine.
Python JSON-i süntaks:
JSON on kirjutatud võtme ja väärtuse paarina.
{ "Key": "Value", "Key": "Value", }
JSON on väga sarnane Python sõnastik. Python toetab JSON-i ja sellel on JSON-ina sisseehitatud teek.
JSON-i teek Python
"tseremooniameister"ja"hapukurk" välised moodulid Python versiooni säilitada JSON Python raamatukogu. Töötamine JSON-iga Python JSON-iga seotud toimingute (nt kodeerimine ja dekodeerimine) tegemiseks peate esmalt tegema import JSON-i raamatukogu ja selle jaoks teie jaoks .py faili
import json
JSON-is on saadaval järgmised meetodid Python moodul
Meetod | Kirjeldus |
---|---|
prügimäed () | kodeerimine JSON-objektidesse |
dump () | kodeeritud stringi kirjutamine faili |
laadib () | Dekodeerige JSON-string |
laadi () | Dekodeerige JSON-faili lugemise ajal |
Python JSON-ile (kodeering)
JSON Raamatukogu Python teostab järgmise tõlke Python objektid vaikimisi JSON-objektideks
Python | JSON |
---|---|
dikteerima | objekt |
nimekiri | Array |
Unicode | nöör |
number – int, long | number – int |
ujuk | number – päris |
Tõsi | Tõsi |
Vale | Vale |
mitte ükski | NULL |
Teisendamine Python andmeid JSON-i nimetatakse kodeerimistoiminguks. Kodeerimine toimub JSON teegi meetodi abil - prügimäed ()
JSON dumps() sisse Python
json.dumps() in Python on meetod, mis teisendab sõnastiku objekte Python JSON-stringi andmevormingusse. See on kasulik, kui objektid peavad olema stringivormingus selliste toimingute jaoks nagu sõelumine, printimine jne.
Nüüd esitame esimese json.dumpsi kodeeringu näite koos 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)
Väljund:
{"person": {"name": "Kenn", "sex": "male", "age": 28}})
Vaatame näidet Python kirjutage JSON faili, et luua sõnastiku JSON-fail, kasutades sama funktsiooni dump ()
# 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)
Väljund:
Midagi pole näidata… Teie süsteemis luuakse fail json_file.json. Saate seda faili kontrollida, nagu on näidatud allolevas JSON-i faili kirjutamises Python näide.
JSON-ile Python (Dekodeerimine)
JSON-stringide dekodeerimine toimub sisseehitatud meetodi abil json.loads() & json.load() JSON-i teegist Python. Siin on tõlketabelis näide JSON-objektide kohta Python esemeid mis on abiks dekodeerimisel Python JSON-stringist.
JSON | Python |
---|---|
objekt | dikteerima |
Array | nimekiri |
nöör | Unicode |
number – int | number – int, long |
number – päris | ujuk |
Tõsi | Tõsi |
Vale | Vale |
NULL | mitte ükski |
Vaatame põhilist JSON-i sõelumist Python abiga dekodeerimise näide json.loads funktsioon
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'))
Väljund:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}} Type of dict_obj <class 'dict'> Person...... {'name': 'John', 'sex': 'male'}
JSON-faili dekodeerimine või JSON-faili parsimine Python
Nüüd õpime, kuidas JSON-faili sisse lugeda Python koos Python parsi JSON-i näide:
MÄRKUS: JSON-faili dekodeerimine on faili sisendi/väljundiga (I/O) seotud toiming. JSON-fail peab teie süsteemis olemas olema määratud asukohas, mida oma programmis mainite.
Python loe JSON-faili Näide:
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)
Siin andmed on sõnastikuobjekt Python nagu on näidatud ülaltoodud loetud JSON-failis Python näide.
Väljund:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Kompaktne kodeering Python
Kui teil on vaja oma JSON-faili suurust vähendada, saate kasutada kompaktset kodeeringut Python.
Näide,
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)
Väljund:
'["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 **
Vormindage JSON-kood (hästi prinditud)
- Eesmärk on kirjutada hästi vormindatud kood inimese arusaamiseks. Ilusa printimise abil saab igaüks koodist hõlpsasti aru.
Näide:
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)
Väljund:
{ "a" : 4, "b" : 5 }
Selle paremaks mõistmiseks muutke taane 40-ks ja jälgige väljundit-
JSON-koodi tellimine:
sortimisklahvid atribuut sisse Python funktsiooni dumps argument sorteerib JSON-i võtme kasvavas järjekorras. Argument sort_keys on Boole'i atribuut. Kui see on tõsi, on sorteerimine lubatud, muidu mitte. Saame aru koos Python string to JSON sortimise näide.
Näide,
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)
Väljund:
{ "age": 45, "cars": [ { "model": "Audi A1", "mpg": 15.1 }, { "model": "Zeep Compass", "mpg": 18.1 } ], "children": [ "Alice", "Bob" ], "married": true, "name": "Ken", "pets": [ "Dog" ] }
Nagu näete võtmete vanusest, on autod, lapsed jne järjestatud kasvavas järjekorras.
Keeruline objektide kodeering Python
Kompleksobjektil on kaks erinevat osa
- Päris osa
- Väljamõeldud osa
Näide: 3 +2i
Enne keeruka objekti kodeerimist peate kontrollima, kas muutuja on keeruline või mitte. Peate looma funktsiooni, mis kontrollib muutujasse salvestatud väärtust eksemplarimeetodi abil.
Loome konkreetse funktsiooni kontrollimiseks, kas objekt on keeruline või kodeerimiseks sobilik.
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)
Väljund:
'[4.0, 5.0]'
Keeruline JSON-objekti dekodeerimine Python
JSON-is keeruka objekti dekodeerimiseks kasutage parameetrit object_hook, mis kontrollib, kas JSON-string sisaldab keerulist objekti või mitte. Saab aru stringiga JSON-i Python Näide,
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)
Väljund:
Complex_object...... (4+5j) Without_complex_object...... {'real': 6, 'img': 7}
JSON-i serialiseerimisklassi JSONEncoder ülevaade
JSONEncoder klassi kasutatakse mis tahes serialiseerimiseks Python objekti kodeerimise ajal. See sisaldab kolme erinevat kodeerimismeetodit, mis on
- vaikimisi(o) – Rakendatud alamklassi ja tagastamise serialize objekti jaoks o objekt
- kodeeri (o) – Sama mis JSON-i prügimäed Python meetod tagastab JSON-stringi Python andmete struktuur.
- iterencode(o) – Esitage string ükshaaval ja kodeerige objekt o.
JSONEncoder klassi meetodi encode() abil saame kodeerida ka mis tahes Python objekti, nagu allpool näidatud Python JSON-kodeerija näide.
# 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)
Väljund:
'{"colour": ["red", "yellow", "green"]}'
JSON-i serialiseerimisklassi JSONDecoder ülevaade
JSONDecoder klassi kasutatakse mis tahes deserialiseerimiseks Python objekti dekodeerimise ajal. See sisaldab kolme erinevat dekodeerimismeetodit, mis on
- vaikimisi(o) – Rakendatud alamklassis ja tagastada deserialiseeritud objekt o objekt
- dekodeerida (o) – Sama nagu json.loads() meetodi tagastamine Python JSON-stringi või andmete andmestruktuur.
- töötlemata_dekood(o) – esindama Python sõnastik ükshaaval ja dekodeerida objekt o.
JSONDecoder klassi meetodi decode() abil saame dekodeerida ka JSON-stringi, nagu allpool näidatud Python JSON-dekoodri näide.
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)
Väljund:
{'colour': ['red', 'yellow']}
JSON-andmete dekodeerimine URL-ist: näide tegelikust elust
Toome CityBike NYC (rattajagamissüsteemi) andmed määratud URL-ilt (https://gbfs.citibikenyc.com/gbfs/2.3/gbfs.json) ja teisendada sõnaraamatu vormingusse.
Python laadige failist JSON Näide:
MÄRKUS. - Veenduge, et taotluste teek on teie seadmesse juba installitud Python, Kui ei, siis avage terminal või CMD ja tippige
- (For Python 3 või uuem) pip3 installitaotlused
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])
Väljund:
<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': '' }
JSON-i teegiga seotud erandid Python:
- klass json.JSONDecoderError käsitleb dekodeerimistoiminguga seotud erandit. ja see on alamklass ValueError.
- Erand - json.JSONDecoderError(msg, doc)
- Erandi parameetrid on
- msg – vormindamata veateade
- doc – JSON-dokumendid sõelutud
- pos – dokumendi käivitamise indeks, kui see ebaõnnestub
- lineno – rida ei näita vastab pos
- koolon – veerg nr vastab pos
Python laadige failist JSON Näide:
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")
Lõpmatu ja NaN Numbers in Python
JSON-i andmevahetusvorming (RFC – kommentaaride nõue) ei luba kasutada lõpmatut ega Nan-väärtust, kuid sellel pole piiranguid Python- JSON-i teek lõpmatu ja Nan-väärtusega seotud toimingu tegemiseks. Kui JSON saab andmetüübi INFINITE ja Nan, teisendatakse see literaaliks.
Näide,
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))
Väljund:
Infinity <class 'str'> NaN inf <class 'float'>
Korduv võti JSON-stringis
RFC määrab, et võtme nimi peaks JSON-objektis olema unikaalne, kuid see ei ole kohustuslik. Python JSON-i teek ei tekita JSON-is korduvate objektide erandit. See ignoreerib kõiki korduvaid võtme-väärtuste paare ja arvestab nende hulgast ainult viimast võtme-väärtuste paari.
- Näide,
import json repeat_pair = '{"a": 1, "a": 2, "a": 3}' json.loads(repeat_pair)
Väljund:
{'a': 3}
CLI (käsurea liides) koos JSON-iga Python
json.tool pakub käsurea liidest JSON-i pärisprindi süntaksi kinnitamiseks. Vaatame CLI näidet
$ echo '{"name" : "Kings Authur" }' | python3 -m json.tool
Väljund:
{ "name": " Kings Authur " }
JSON-i eelised Python
- Lihtne konteineri ja väärtuse vahel tagasi liikuda (JSON-i Python ja Python JSON-ile)
- Inimloetav (hästi trükitud) JSON-objekt
- Laialdaselt kasutusel andmetöötluses.
- Sellel ei ole ühes failis sama andmestruktuur.
JSON-i rakendamise piirangud Python
- JSON-i vahemiku deserialiseerijas ja arvu ennustamises
- JSON-stringi ja JSON-massiivide maksimaalne pikkus ning objektide pesastustasemed.
Python JSON-petuleht
Python JSON-funktsioon | Kirjeldus |
---|---|
json.dumps(isiku_andmed) | Looge JSON-objekt |
json.dump(isiku_andmed, faili_kirjutus) | Looge JSON-fail, kasutades faili I/O of Python |
compact_obj = json.dumps(data, separators=(',',':')) | Tihendage JSON-objekt, eemaldades eraldaja abil JSON-objektilt tühiku |
formatted_obj = json.dumps(dic, taane=4, eraldajad=(',', ':')) | JSON-koodi vormindamine taande abil |
sorted_string = json.dumps(x, taane=4, sort_keys=True) | JSON-objektivõtme sortimine tähestiku järjekorras |
kompleksi_obj = json.dumps(4 + 5j, vaike=kompleks_encode) | Python JSON-i keeruline objektide kodeerimine |
JSONEncoder().encode(color_dict) | JSONEncoder klassi kasutamine serialiseerimiseks |
json.loads(data_string) | JSON-stringi dekodeerimine Python sõnastik funktsiooni json.loads() abil |
json.loads('{“__complex__”: tõsi, “päris”: 4, “img”: 5}', objekti_konks = on_kompleks) | Keerulise JSON-objekti dekodeerimine Python |
JSONDekooder().dekood(värvi_string) | JSON-i dekodeerimise kasutamine Python koos deserialiseerimisega |