Mikä on JSON?
JSON on vakiomuoto tietojenvaihtoon, joka on innoittamana JavaScriptiä. Yleensä JSON on merkkijono- tai tekstimuodossa. JSON tarkoittaa J ava S cript O bject N otation.
JSON: n syntakse: JSON kirjoitetaan avain- ja arvopariksi.
{"Key": "Value","Key": "Value",}
JSON on hyvin samanlainen kuin Python-sanakirja. Python tukee JSONia, ja sillä on sisäänrakennettu kirjasto JSON: ksi.
JSON-kirjasto Pythonissa
Pythonin ulkoiset moduulit ' marsalkka ' ja ' peittaus' ylläpitävät JSON- kirjaston versiota . Jos haluat suorittaa JSON-toimintoja, kuten koodauksen ja dekoodauksen Pythonissa, sinun on ensin tuotava JSON-kirjasto ja sitä varten .py- tiedostoon,
import json
Seuraavat menetelmät ovat käytettävissä JSON-moduulissa
Menetelmä | Kuvaus |
---|---|
kaatopaikat () | koodaus JSON-objekteihin |
kaataa () | koodattu merkkijono kirjoittaminen tiedostoon |
kuormat () | Dekoodaa JSON-merkkijono |
ladata() | Dekoodaa, kun JSON-tiedosto luetaan |
Python - JSON (koodaus)
JSON-kirjasto Python suorittaa oletuksena seuraavan Python-objektien kääntämisen JSON-objekteiksi
Python | JSON |
sanella | Esine |
lista | Taulukko |
unicode | Merkkijono |
numero - int, pitkä | numero - sis |
kellua | numero - todellinen |
Totta | Totta |
Väärä | Väärä |
Ei mitään | Tyhjä |
Python-tietojen muuntamista JSONiksi kutsutaan koodaustoiminnoksi. Koodaus tapahtuu JSON-kirjastomenetelmän avulla - dumps ()
dumps () -menetelmä muuntaa pythonin sanakirjaobjektin JSON-merkkijonotiedostomuodoksi.
Nyt voimme suorittaa ensimmäisen koodausesimerkin Pythonilla.
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)
Tuotos:
{"person": {"name": "Kenn", "sex": "male", "age": 28}})
Luodaan JSON-tiedosto sanakirjasta käyttämällä samaa toimintoa 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)
Tuotos:
Ei mitään näytettävää
… Järjestelmässä json_file.json on luotu, että voit tarkistaa kyseisen tiedoston.JSON - Python (dekoodaus)
JSON-merkkijonon dekoodaus tapahtuu sisäänrakennettujen menetelmien latausten () ja JSON-kirjaston load () avulla Pythonissa. Tässä käännöstaulukossa on esimerkki JSON-objekteista Python-objekteihin, jotka ovat hyödyllisiä dekoodauksen suorittamiseksi JSON-merkkijonon Pythonissa.
JSON | Python |
Esine | sanella |
Taulukko | lista |
Merkkijono | unicode |
numero - sis | numero - int, pitkä |
numero - todellinen | kellua |
Totta | Totta |
Väärä | Väärä |
Tyhjä | Ei mitään |
Katsotaanpa perusesimerkki dekoodauksesta Pythonissa json.loads () -funktion avulla,
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'))
Tuotos:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}Type of dict_objPerson… {'name': 'John', 'sex': 'male'}
JSON-tiedoston dekoodaus tai JSON-tiedoston jäsentäminen Pythonissa
HUOMAUTUS: JSON-tiedoston dekoodaus on Tiedostojen tulo / lähtö (I / O) -toimintoa. JSON-tiedoston on oltava järjestelmässäsi määritetyssä paikassa, jonka mainitset ohjelmassa.
Esimerkki,
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)
Tässä data on Pythonin sanakirjaobjekti.
Tuotos:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Kompakti koodaus Pythonissa
Kun sinun on pienennettävä JSON-tiedostosi kokoa, voit käyttää pienikokoista koodausta Pythonissa.
Esimerkki,
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)
Tuotos:
'["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 **
Alusta JSON-koodi (melko painettu)
- Tavoitteena on kirjoittaa hyvin muotoiltu koodi ihmisten ymmärtämistä varten. Kaunien tulostusten avulla kuka tahansa voi helposti ymmärtää koodin.
- Esimerkki,
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)
Tuotos:
{"a" : 4,"b" : 5}
Ymmärtääksesi tämän paremmin, vaihda luetelmakohta 40: een ja tarkkaile
JSON-koodin tilaaminen:
sort_keys- määrite dumps () -funktion argumentissa lajittelee avaimen JSONissa nousevassa järjestyksessä. Argumentti sort_keys on Boolen-attribuutti. Kun se on totta, lajittelu on sallittua, muuten ei
Esimerkki,
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)
Tuotos:
{"age": 45,"cars": [ {"model": "Audi A1","mpg": 15.1},{"model": "Zeep Compass","mpg": 18.1}],"children": [ "Alice","Bob"],"married": true,"name": "Ken","pets": ["Dog"]}
Kuten saatat huomata avainten iän, autot, lapset jne. On järjestetty nousevaan järjestykseen.
Pythonin monimutkainen objektikoodaus
Monimutkaisella objektilla on kaksi erilaista osaa
- Todellinen osa
- Kuvitteellinen osa
Esimerkki: 3 + 2i
Ennen kuin suoritat monimutkaisen objektin koodauksen, sinun on tarkistettava, onko muuttuja monimutkainen vai ei. Sinun on luotava toiminto, joka tarkistaa muuttujaan tallennetun arvon ilmentymämenetelmällä.
Luodaan tarkistusobjektin tietty funktio on monimutkainen tai kelvollinen koodaukseen.
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)
Tuotos:
'[4.0, 5.0]'
JSON-objektien monimutkainen dekoodaus Pythonissa
Jos haluat purkaa monimutkaisen objektin JSON: ssa, käytä object_hook-parametria, joka tarkistaa, että JSON-merkkijono sisältää kompleksisen objektin vai ei. Esimerkki,
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)
Tuotos:
Complex_object… (4+5j)Without_complex_object… {'real': 6, 'img': 7}
JSON-sarjanumeron yleiskatsaus JSONEncoder
JSONEncoder-luokkaa käytetään minkä tahansa Python-objektin sarjoitukseen koodausta suoritettaessa. Se sisältää kolme erilaista koodaustapaa, jotka ovat
- oletus (o) - toteutettu alaluokassa ja palauta o- objektin sarjallisuusobjekti .
- encode (o) - Sama kuin json.dumps () -menetelmä palauttaa JSON-merkkijonon Python-tietorakenteesta.
- iterencode (o) - Esitä merkkijono yksi kerrallaan ja koodaa objekti o.
JSONEncoder-luokan encode () -menetelmän avulla voimme koodata myös minkä tahansa Python-objektin.
# import JSONEncoder class from jsonfrom json.encoder import JSONEncodercolour_dict = { "colour": ["red", "yellow", "green" ]}# directly called encode method of JSONJSONEncoder().encode(colour_dict)
Tuotos:
'{"colour": ["red", "yellow", "green"]}'
Yleiskatsaus JSON Deserialization -luokkaan JSONDecoder
JSONDecoder-luokkaa käytetään minkä tahansa Python-objektin deserialointiin dekoodausta suoritettaessa. Se sisältää kolme erilaista dekoodausmenetelmää, jotka ovat
- oletus (o) - toteutetaan alaluokassa ja palautetaan deserialisoitu objekti o- objekti.
- purkaa (o) - Sama kuin menetelmä json.loads () palauttaa JSON-merkkijonon tai datan Python-tietorakenteen.
- raw_decode (o) - Esitä Python-sanakirja yksitellen ja purkaa objekti o.
JSONDecoder-luokan decode () -menetelmän avulla voimme myös purkaa JSON-merkkijonon.
import json# import JSONDecoder class from jsonfrom json.decoder import JSONDecodercolour_string = '{ "colour": ["red", "yellow"]}'# directly called decode method of JSONJSONDecoder().decode(colour_string)
Tuotos:
{'colour': ['red', 'yellow']}
JSON-tietojen dekoodaus URL-osoitteesta: Tosielämän esimerkki
Haemme CityBike NYC: n (Bike Sharing System) tiedot määritetystä URL-osoitteesta (https://feeds.citibikenyc.com/stations/stations.json) ja muunnetaan sanakirjamuodoksi.
Esimerkki,
HUOMAUTUS: - Varmista, että pyyntökirjasto on jo asennettu Pythoniin. Jos ei, avaa sitten pääte tai CMD ja kirjoita
- (Python 3 tai uudempi) pip3-asennuspyynnöt
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])
Tuotos:
{'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-kirjastoon Pythonissa liittyvät poikkeukset:
- Luokka json.JSONDecoderError hoitaa dekoodaustoimintaan liittyvän poikkeuksen. ja se on ValueError- alaluokka .
- Poikkeus - json.JSONDecoderError (msg, doc)
- Poikkeuksen parametrit ovat
- msg - alustamaton virheilmoitus
- doc - JSON-asiakirjat jäsennetty
- pos - doc-hakemisto, kun se epäonnistuu
- liinavaatteet - rivinumerot eivät vastaa pos
- kaksoispiste - sarake ei vastaa pos
Esimerkki,
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")
Äärettömät ja NaN-numerot Pythonissa
JSON-tiedonsiirtomuoto (RFC - Request for Comments) ei salli Ääretöntä tai Nan-arvoa, mutta Python-JSON-kirjastossa ei ole rajoituksia suorittaa Äärettömään ja Nan-arvoon liittyviä toimintoja. Jos JSON saa INFINITE ja Nan -tietotyypin, se muuntaa sen kirjaimeksi.
Esimerkki,
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))
Tuotos:
InfinityNaNinf
Toistettu avain JSON-merkkijonossa
RFC määrittää avaimen nimen olevan yksilöllinen JSON-objektissa, mutta se ei ole pakollinen. Python JSON -kirjasto ei tuota poikkeusta toistuvista objekteista JSON: ssa. Se jättää huomiotta kaikki toistuvat avain-arvo-parit ja ottaa huomioon vain viimeisen avain-arvo-parin joukossa.
- Esimerkki,
import jsonrepeat_pair = '{"a": 1, "a": 2, "a": 3}'json.loads(repeat_pair)
Tuotos:
{'a': 3}
CLI (komentoriviliitäntä) JSON: n kanssa Pythonissa
json.tool tarjoaa komentoriviliitännän JSON pretty-print -syntaksin vahvistamiseksi. Katsotaanpa esimerkki CLI: stä
$ echo '{"name" : "Kings Authur" }' | python3 -m json.tool
Tuotos:
{"name": " Kings Authur "}
JSON: n edut Pythonissa
- Helppo siirtyä takaisin kontin ja arvon välillä (JSON - Python ja Python - JSON)
- Ihmisen luettavissa oleva (melko painettu) JSON-objekti
- Laajalti käytetty tietojen käsittelyssä.
- Sillä ei ole samaa tietorakennetta yhdessä tiedostossa.
JSON: n käyttöönoton rajoitus Pythonissa
- JSON-alueen deserialisaattorissa ja luvun ennustaminen
- JSON-merkkijonon ja JSON-taulukoiden enimmäispituus ja objektin sisäkkäiset tasot.
Huijauskoodi
json.dumps (henkilötiedot) |
Luo JSON-objekti |
json.dump (henkilötiedot, tiedoston_kirjoittaminen) |
Luo JSON-tiedosto käyttämällä Pythonin File I / O -ohjelmaa |
compact_obj = json.dumps (data, erotimet = (',', ':')) |
Tiivistä JSON-objekti poistamalla välilyönti JSON-objektista erottimen avulla |
formatted_obj = json.dumps (dic, sisennys = 4, erottimet = (',', ':')) |
JSON-koodin muotoilu sisennyksen avulla |
lajiteltu_merkkijono = json.dumps (x, sisennys = 4, lajitteluavain = oikea) |
JSON-objektiavain lajittelu aakkosjärjestyksessä |
complex_obj = json.dumps (4 + 5j, oletus = complex_encode) |
Python Complex Object -koodaus JSON: ssa |
JSONEncoder (). Koodaa (colour_dict) |
JSONEncoder-luokan käyttö sarjoitukseen |
json.loads (data_merkkijono) |
JSON-merkkijonon dekoodaus Python-sanakirjassa käyttämällä json.loads () -toimintoa |
json.loads ('{"__ complex__": true, "real": 4, "img": 5}', object_hook = is_kompleksi) |
Dekoodaa monimutkainen JSON-objekti Pythoniksi |
JSONDecoder (). Dekoodaa (värin_merkkijono) |
JSON-dekoodauksen käyttö Pythoniin deserialisoinnilla |