Python JSON: Kooda (vedoksia), purkaa (lataa) ja lue JSON-tiedosto
Missä JSON on Python?
JSON in Python on vakiomuoto, joka on saanut inspiraationsa JavaSkripti tiedonvaihtoon ja tiedonsiirtoon tekstimuodossa verkon yli. Yleensä JSON on merkkijono- tai tekstimuodossa. Sovellusliittymät ja tietokannat voivat käyttää sitä, ja se edustaa objekteja nimi/arvo-pareina. JSON tarkoittaa JavaScript Object Notation.
Python JSON-syntaksi:
JSON kirjoitetaan avain- ja arvoparina.
{ "Key": "Value", "Key": "Value", }
JSON on hyvin samanlainen Python sanakirja. Python tukee JSON:ia, ja siinä on sisäänrakennettu kirjasto JSON-muodossa.
JSON-kirjasto sisään Python
"marsalkka'Ja'suolakurkku' ulkoiset moduulit Python ylläpitää versiota JSON Python kirjasto. Työskentely JSONin kanssa Python suorittaaksesi JSON-toimintoja, kuten koodauksen ja dekoodauksen, sinun on ensin tuoda JSON-kirjasto ja sitä varten sinun .py tiedosto,
import json
Seuraavat menetelmät ovat käytettävissä JSONissa Python moduuli
Menetelmä | Tuotetiedot |
---|---|
kaatopaikat () | koodaus JSON-objekteihin |
dump() | koodatun merkkijonon kirjoittaminen tiedostoon |
lataa () | Pura JSON-merkkijono |
ladata() | Purkaa JSON-tiedostoa luettaessa |
Python JSONiin (koodaus)
JSON Kirjasto Python suorittaa seuraavan käännöksen Python objektit oletuksena JSON-objekteiksi
Python | JSON |
---|---|
dict | objekti |
lista | Ryhmä |
Unicode | jono |
numero – int, long | numero – int |
kellua | numero - todellinen |
Totta | Totta |
Väärä | Väärä |
Ei eristetty | Null |
Muuntaminen Python dataa JSONiin kutsutaan koodaustoiminnoksi. Koodaus tehdään JSON-kirjastomenetelmän avulla - kaatopaikat ()
JSON dumps() sisään Python
json.dumps() in Python on menetelmä, joka muuntaa sanakirjaobjekteja Python JSON-merkkijonotietomuotoon. Se on hyödyllinen, kun objektien on oltava merkkijonomuodossa toimintoihin, kuten jäsennykseen, tulostukseen jne.
Suoritetaan nyt ensimmäinen json.dumps-koodausesimerkki 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)
lähtö:
{"person": {"name": "Kenn", "sex": "male", "age": 28}})
Katsotaanpa esimerkkiä Python kirjoita JSON tiedostoon sanakirjan JSON-tiedoston luomiseksi käyttämällä samaa toimintoa 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)
lähtö:
Ei mitään näytettävää… Järjestelmässäsi luodaan json_file.json. Voit tarkistaa tiedoston alla olevan kuvan mukaisesti, kirjoita JSON tiedostoon Python esimerkki.
JSON kohteeseen Python (Dekoodaus)
JSON-merkkijonojen dekoodaus tehdään sisäänrakennetun menetelmän avulla json.loads() & json.load() JSON-kirjastosta Python. Tässä käännöstaulukossa on esimerkki JSON-objekteista Python esineet joista on apua koodauksen suorittamisessa Python JSON-merkkijonosta.
JSON | Python |
---|---|
objekti | dict |
Ryhmä | lista |
jono | Unicode |
numero – int | numero – int, long |
numero - todellinen | kellua |
Totta | Totta |
Väärä | Väärä |
Null | Ei eristetty |
Katsotaanpa perusjäsennys JSON Python esimerkki dekoodauksesta json.loads toiminto,
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'))
lähtö:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}} Type of dict_obj <class 'dict'> Person...... {'name': 'John', 'sex': 'male'}
JSON-tiedoston purkaminen tai JSON-tiedoston jäsentäminen Python
Nyt opimme lukemaan JSON-tiedostoa Python with Python jäsentää JSON-esimerkki:
HUOMAUTUS: JSON-tiedoston dekoodaus liittyy tiedoston sisääntuloon/lähtöön (I/O) liittyvään toimintoon. JSON-tiedoston on oltava järjestelmässäsi määritetyssä paikassa, jonka mainitsit ohjelmassasi.
Python lue JSON-tiedosto Esimerkki:
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)
Tässä dataa on sanakirjaobjekti Python kuten yllä olevassa luetussa JSON-tiedostossa näkyy Python esimerkki.
lähtö:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Kompakti koodaus sisään Python
Kun sinun on pienennettävä JSON-tiedostosi kokoa, voit käyttää kompaktia koodausta Python.
esimerkiksi,
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)
lähtö:
'["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 **
Muotoile JSON-koodi (kaunis printti)
- Tavoitteena on kirjoittaa hyvin muotoiltu koodi ihmisen ymmärtämiseksi. Kauniin tulostuksen avulla kuka tahansa voi helposti ymmärtää koodin.
Esimerkiksi:
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)
lähtö:
{ "a" : 4, "b" : 5 }
Ymmärtääksesi tämän paremmin, vaihda sisennykseksi 40 ja tarkkaile tulos-
JSON-koodin tilaaminen:
lajitteluavaimet määrite sisään Python dumps-funktion argumentti lajittelee JSON-avaimen nousevaan järjestykseen. Sort_keys-argumentti on Boolen attribuutti. Kun se on totta, lajittelu on sallittua muuten ei. Ymmärretään kanssa Python merkkijono JSON-lajitteluesimerkki.
esimerkiksi,
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)
lähtö:
{ "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 huomaat avainten iän, autot, lapset jne. on järjestetty nousevaan järjestykseen.
Monimutkainen objektikoodaus Python
Monimutkaisella objektilla on kaksi eri 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 funktio, joka tarkistaa muuttujaan tallennetun arvon instanssimenetelmällä.
Luodaan erityinen toiminto tarkistamaan, onko objekti monimutkainen tai kelvollinen koodaukseen.
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)
lähtö:
'[4.0, 5.0]'
Monimutkainen JSON-objektin dekoodaus sisään Python
Jos haluat purkaa monimutkaisen objektin JSONissa, käytä object_hook-parametria, joka tarkistaa, sisältääkö JSON-merkkijono monimutkaisen objektin vai ei. Ymmärretään merkkijonolla JSONiin Python esimerkiksi,
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)
lähtö:
Complex_object...... (4+5j) Without_complex_object...... {'real': 6, 'img': 7}
Yleiskatsaus JSON-serialisointiluokkaan JSONEncoder
JSONEncoder-luokkaa käytetään minkä tahansa sarjoitukseen Python objektia koodauksen aikana. Se sisältää kolme erilaista koodausmenetelmää, jotka ovat
- oletus(o) – Toteutettu alaluokkaan ja paluu serialize -objektille o esine.
- koodaa(o) – Sama kuin JSON-vedot Python menetelmä palauttaa JSON-merkkijonon Python tietorakenne.
- iterencode(o) – Esitä merkkijono yksitellen ja koodaa objekti o.
JSONEncoder-luokan encode()-metodin avulla voimme myös koodata minkä tahansa Python kohde alla olevan kuvan mukaisesti Python Esimerkki JSON-kooderista.
# 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)
lähtö:
'{"colour": ["red", "yellow", "green"]}'
Yleiskatsaus JSON-sarjanpoistoluokkaan JSONDecoder
JSONDecoder-luokkaa käytetään minkä tahansa sarjoitukseen Python kohdetta dekoodauksen aikana. Se sisältää kolme erilaista dekoodausmenetelmää, jotka ovat
- oletus(o) – Toteutettu alaluokassa ja palauttaa deserialisoitu objekti o esine.
- dekoodaa (o) – Sama kuin json.loads()-metodin palautus Python JSON-merkkijonon tai -datan tietorakenne.
- raaka_dekoodaus(o) – Edustaa Python sanakirja yksitellen ja purkaa objekti o.
JSONDecoder-luokan decode()-menetelmän avulla voimme myös purkaa JSON-merkkijonon alla olevan kuvan mukaisesti. Python Esimerkki JSON-dekooderista.
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)
lähtö:
{'colour': ['red', 'yellow']}
JSON-tietojen purkaminen URL-osoitteesta: Esimerkki tosielämästä
Haemme CityBike NYC:n (Bike Sharing System) tiedot määritetystä URL-osoitteesta (https://gbfs.citibikenyc.com/gbfs/2.3/gbfs.json) ja muuntaa sanakirjamuotoon.
Python lataa JSON tiedostosta Esimerkki:
HUOMAUTUS: - Varmista, että pyyntökirjasto on jo asennettu tietokoneellesi Python, Jos ei, avaa Terminal tai CMD ja kirjoita
- (For Python 3 tai uudempi) pip3-asennuspyynnöt
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])
lähtö:
<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-kirjastoon liittyvät poikkeukset Python:
- luokka json.JSONDecoderError käsittelee dekoodaukseen liittyvän poikkeuksen. ja se on alaluokka ValueError.
- Poikkeus - json.JSONDecoderError(msg, doc)
- Poikkeusparametrit ovat
- msg – Muotoilematon virheviesti
- doc – JSON-dokumentit jäsennetty
- pos – aloita asiakirjan hakemisto, kun se epäonnistuu
- lineno – rivin näytöt vastaavat pos
- kaksoispiste – sarake ei vastaa paikkaa
Python lataa JSON tiedostosta Esimerkki:
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")
Infinite ja NaN Numbers in Python
JSON Data Interchange Format (RFC – Request For Comments) ei salli Infinite- tai Nan-arvoa, mutta siinä ei ole rajoituksia Python- JSON-kirjasto Infinite- ja Nan-arvoon liittyvien toimintojen suorittamiseen. Jos JSON saa INFINITE- ja Nan-tietotyypit, se muuntaa sen literaaliksi.
esimerkiksi,
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))
lähtö:
Infinity <class 'str'> NaN inf <class 'float'>
Toistuva avain JSON-merkkijonossa
RFC määrittää, että avaimen nimen tulee olla yksilöllinen JSON-objektissa, mutta se ei ole pakollista. Python JSON-kirjasto ei aiheuta poikkeusta toistuvista objekteista JSONissa. Se jättää huomioimatta kaikki toistuvat avainarvoparit ja ottaa huomioon vain viimeisen avainarvoparin.
- esimerkiksi,
import json repeat_pair = '{"a": 1, "a": 2, "a": 3}' json.loads(repeat_pair)
lähtö:
{'a': 3}
CLI (Command Line Interface), jossa on JSON Python
json.tool tarjoaa komentoriviliittymän JSON pretty-print -syntaksin vahvistamiseen. Katsotaanpa esimerkkiä CLI:stä
$ echo '{"name" : "Kings Authur" }' | python3 -m json.tool
lähtö:
{ "name": " Kings Authur " }
JSONin edut sisään Python
- Helppo siirtää takaisin säilön ja arvon välillä (JSON to Python ja Python JSONiin)
- Ihmisen luettavissa oleva (kauniin painettu) JSON-objekti
- Käytetään laajasti tietojenkäsittelyssä.
- Sillä ei ole samaa tietorakennetta yhdessä tiedostossa.
JSONin käyttöönottorajoitukset Python
- JSON-alueen deserialisoijassa ja luvun ennustamisessa
- JSON-merkkijonon ja JSON-taulukoiden enimmäispituus ja objektin sisäkkäiset tasot.
Python JSON-huijauslehti
Python JSON-toiminto | Tuotetiedot |
---|---|
json.dumps(person_data) | Luo JSON-objekti |
json.dump(person_data, file_write) | Luo JSON-tiedosto käyttämällä File I/O of Python |
compact_obj = json.dumps(data, separators=(',',':')) | Tiivistä JSON-objekti poistamalla välilyönti JSON-objektista erottimen avulla |
formatted_obj = json.dumps(dic, indent=4, separators=(',', ': ')) | JSON-koodin muotoilu sisennyksen avulla |
lajiteltu_merkkijono = json.dumps(x, indent=4, sort_keys=True) | JSON-objektiavaimen lajittelu aakkosjärjestykseen |
kompleksi_obj = json.dumps(4 + 5j, oletus = monimutkainen_encode) | Python Monimutkainen objektikoodaus JSONissa |
JSONEncoder().encode(colour_dict) | JSONEncoder-luokan käyttö sarjoituksessa |
json.loads(data_string) | Puretaan JSON-merkkijonoa Python sanakirja json.loads()-funktiolla |
json.loads('{"__complex__": tosi, "todellinen": 4, "img": 5}', object_hook = on_kompleksi) | Monimutkaisen JSON-objektin dekoodaus kohteeseen Python |
JSONDecoder().decode(värimerkkijono) | JSON-dekoodauksen käyttö Python deserialisoinnin kanssa |