Python JSON: kodiranje (dump), dekodiranje (nalaganje) json Data & Datoteka (primer)

Kazalo:

Anonim

Kaj je JSON?

JSON je standardni format za izmenjavo podatkov, ki ga navdihuje JavaScript. Na splošno je JSON v obliki niza ali besedila. JSON pomeni J ava S cript O bject N otation.

Sintaksa JSON: JSON je zapisana kot par ključ in vrednost.

{"Key": "Value","Key": "Value",}

JSON je zelo podoben slovarju Python. Python podpira JSON in ima vgrajeno knjižnico kot JSON.

Knjižnica JSON v Pythonu

' marshal ' in ' pickle' zunanja modula Pythona vzdržujeta različico knjižnice JSON . Za izvajanje operacij, povezanih z JSON, kot je kodiranje in dekodiranje v Pythonu, morate najprej uvoziti knjižnico JSON in to v datoteko .py ,

import json

V modulu JSON so na voljo naslednji načini

Metoda Opis
odlagališča () kodiranje predmetov JSON
dump () kodirano zapisovanje nizov v datoteko
obremenitve () Dekodirajte niz JSON
obremenitev () Dekodiraj med branjem datoteke JSON

Python v JSON (kodiranje)

Knjižnica JSON v Pythonu privzeto izvede prevajanje predmetov Python v predmete JSON

Python JSON
dict Predmet
seznam Matrika
unicode Vrvica
številka - int, dolga številka - int
float število - resnično
Prav Prav
Lažno Lažno
Nobenega Nič

Pretvorba podatkov Pythona v JSON se imenuje kodiranje. Kodiranje poteka s pomočjo knjižnične metode JSON - dumps ()

metoda dumps () pretvori slovarski objekt pythona v format podatkovnih nizov JSON.

Zdaj lahko izvedemo prvi primer kodiranja s Pythonom.

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)

Izhod:

{"person": {"name": "Kenn", "sex": "male", "age": 28}})

Ustvarimo datoteko JSON slovarja z uporabo iste funkcije 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)

Izhod:

Ničesar za pokazati

… V vašem sistemu je ustvarjen json_file.json, ki ga lahko preverite.

JSON v Python (dekodiranje)

JSON niz dekodiranje poteka s pomočjo vgrajenih metoda obremenitvah () in obremenitve () za JSON knjižnice v Python. Tukaj je v prevodni tabeli prikaz primerov objektov JSON v objekte Python, ki so koristni za dekodiranje v Pythonu niza JSON

JSON Python
Predmet dict
Matrika seznam
Vrvica unicode
številka - int številka - int, dolga
število - resnično float
Prav Prav
Lažno Lažno
Nič Nobenega

Oglejmo si osnovni primer dekodiranja v Pythonu s pomočjo funkcije 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'))

Izhod:

{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}Type of dict_obj Person… {'name': 'John', 'sex': 'male'}

Dekodiranje datoteke JSON ali razčlenjevanje datoteke JSON v Pythonu

OPOMBA: Dekodiranje datoteke JSON je povezano z vnosom / izhodom datoteke (I / O). Datoteka JSON mora obstajati v vašem sistemu na določenem mestu, ki ga omenite v svojem programu.

Primer,

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)

Tu so podatki slovarski objekt Pythona.

Izhod:

{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}

Kompaktno kodiranje v Pythonu

Ko morate zmanjšati velikost datoteke JSON, lahko uporabite kompaktno kodiranje v Pythonu.

Primer,

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)

Izhod:

'["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 ** 

Oblikujte kodo JSON (lep tisk)

  • Cilj je napisati dobro oblikovano kodo za človeško razumevanje. S pomočjo lepega tiskanja lahko kdo zlahka razume kodo.
  • Primer,
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)

Izhod:

{"a" : 4,"b" : 5}

Da bi to bolje razumeli, spremenite zamik na 40 in opazujte

Naročanje kode JSON:

Atribut sort_keys v argumentu dumps () bo razvrstil ključ v JSON v naraščajočem vrstnem redu. Argument sort_keys je logični atribut. Ko je res, je sortiranje dovoljeno, sicer ne

Primer,

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)

Izhod:

{"age": 45,"cars": [ {"model": "Audi A1","mpg": 15.1},{"model": "Zeep Compass","mpg": 18.1}],"children": [ "Alice","Bob"],"married": true,"name": "Ken","pets": ["Dog"]}

Kot lahko opazite, so ključi starost, avtomobili, otroci itd. Razporejeni v naraščajočem vrstnem redu.

Zapleteno kodiranje objektov Pythona

Kompleksni objekt ima dva različna dela, to je

  1. Pravi del
  2. Imaginarni del

Primer: 3 + 2i

Pred izvedbo kodiranja zapletenega predmeta morate preveriti, ali je spremenljivka zapletena ali ne. Ustvariti morate funkcijo, ki z metodo primerka preveri vrednost, shranjeno v spremenljivki.

Ustvarimo posebno funkcijo za preveritveni objekt, ki je zapletena ali primerna za kodiranje.

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)

Izhod:

'[4.0, 5.0]'

Kompleksno dekodiranje objektov JSON v Pythonu

Če želite dešifrirati kompleksni objekt v JSON, uporabite parameter object_hook, ki preveri, ali niz JSON vsebuje kompleksni predmet ali ne. Primer,

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)

Izhod:

Complex_object… (4+5j)Without_complex_object… {'real': 6, 'img': 7}

Pregled razreda serializacije JSON JSONEncoder

Razred JSONEncoder se uporablja za serializacijo katerega koli predmeta Python med izvajanjem kodiranja. Vsebuje tri različne metode kodiranja, ki so

  • privzeto (o) - implementirano v podrazred in vrni serializiranje predmeta za objekt o .
  • encode (o) - Enako kot metoda json.dumps () vrne niz JSON podatkovne strukture Python.
  • iterencode (o) - predstavite niz enega za drugim in kodirajte objekt o.

S pomočjo metode encode () razreda JSONEncoder lahko kodiramo tudi kateri koli objekt Python.

# import JSONEncoder class from jsonfrom json.encoder import JSONEncodercolour_dict = { "colour": ["red", "yellow", "green" ]}# directly called encode method of JSONJSONEncoder().encode(colour_dict)

Izhod:

'{"colour": ["red", "yellow", "green"]}'

Pregled razreda deserializacije JSON JSONDecoder

Razred JSONDecoder se uporablja za deserializacijo katerega koli predmeta Python med izvajanjem dekodiranja. Vsebuje tri različne metode dekodiranja, ki so

  • privzeto (o) - implementirano v podrazred in vrne deserializirani objekt o objekt.
  • decode (o) - Enako kot metoda json.loads () vrne Python podatkovno strukturo niza ali podatkov JSON.
  • raw_decode (o) - predstavite slovar Python enega za drugim in dekodirajte objekt o.

S pomočjo metode decode () razreda JSONDecoder lahko dekodiramo tudi niz 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)

Izhod:

{'colour': ['red', 'yellow']}

Dekodiranje podatkov JSON iz URL-ja: primer iz resničnega življenja

Podatke CityBike NYC (sistem za skupno rabo koles) bomo dobili iz določenega URL-ja (https://feeds.citibikenyc.com/stations/stations.json) in jih pretvorili v obliko slovarja.

Primer,

OPOMBA: - Prepričajte se, da je knjižnica zahtev že nameščena v vašem Pythonu, v nasprotnem primeru odprite Terminal ali CMD in vnesite

  • (Za Python 3 ali novejše) zahteve za namestitev 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])

Izhod:

{'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': ''}

Izjeme, povezane s knjižnico JSON v Pythonu:

  • Razred json.JSONDecoderError obravnava izjemo, povezano z dekodiranjem. in je podrazred ValueError.
  • Izjema - json.JSONDecoderError (msg, doc)
  • Parametri izjem so,
    • msg - Neformatirano sporočilo o napaki
    • doc - Dokumenti JSON razčlenjeni
    • pos - začetek indeksa dokumenta, ko ta ne uspe
    • lineno - nobena oddaja ne ustreza poz
    • debelo črevo - stolpec št. ustreza poz

Primer,

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")

Neskončne in NaN številke v Pythonu

Format izmenjave podatkov JSON (RFC - Zahteva za komentarje) ne dovoljuje neskončne vrednosti ali vrednosti Nan, vendar knjižnica Python-JSON nima omejitev za izvajanje operacije, povezane z neskončnostjo in vrednostjo Nan. Če JSON dobi tip podatkov INFINITE in Nan, ga pretvori v dobesedno.

Primer,

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

Izhod:

InfinityNaNinf

Ponovljeni ključ v nizu JSON

RFC določa, da mora biti ime ključa enolično v objektu JSON, vendar ni obvezno. Knjižnica Python JSON ne sproži izjeme ponavljajočih se predmetov v JSON-u. Ne upošteva vseh ponovljenih parov ključ-vrednost in upošteva le zadnji par ključ-vrednost.

  • Primer,
import jsonrepeat_pair = '{"a": 1, "a": 2, "a": 3}'json.loads(repeat_pair)

Izhod:

{'a': 3}

CLI (vmesnik ukazne vrstice) z JSON v Pythonu

json.tool ponuja vmesnik ukazne vrstice za preverjanje skladnosti precej natisnjenih JSON. Poglejmo primer CLI

$ echo '{"name" : "Kings Authur" }' | python3 -m json.tool

Izhod:

{"name": " Kings Authur "}

Prednosti JSON-a v Pythonu

  • Enostaven premik med vsebnikom in vrednostjo (JSON v Python in Python v JSON)
  • Človeku berljiv (lepo natisnjen) objekt JSON
  • Veliko se uporablja pri obdelavi podatkov.
  • V isti datoteki nima enake podatkovne strukture.

Omejitev izvedbe JSON v Pythonu

  • V deserializatorju obsega JSON in predvidevanju števila
  • Največja dolžina niza JSON in nizov JSON in ravni gnezdenja predmeta.

Koda goljufije

json.dumps (person_data)

Ustvari objekt JSON

json.dump (person_data, file_write)

Ustvarite datoteko JSON z uporabo vhodnega / izhodnega datoteke Pythona

compact_obj = json.dumps (podatki, ločila = (',', ':'))

Kompaktni objekt JSON z odstranjevanjem presledka iz objekta JSON z ločevalnikom

formatted_obj = json.dumps (dic, zamik = 4, ločila = (',', ':'))

Oblikovanje kode JSON z zamikom

sorted_string = json.dumps (x, zamik = 4, sort_keys = True)

Razvrščanje ključa predmeta JSON po abecednem vrstnem redu

complex_obj = json.dumps (4 + 5j, privzeto = complex_encode)

Kodiranje kompleksnega objekta Python v JSON

JSONEncoder (). Encode (colour_dict)

Uporaba razreda JSONEncoder za serializacijo

json.loads (niz_podatkov)

Dekodiranje niza JSON v slovarju Python s pomočjo funkcije json.loads ()

json.loads ('{"__ kompleks__": true, "real": 4, "img": 5}', object_hook = is_complex)

Dekodiranje kompleksnega objekta JSON v Python

JSONDecoder (). Dekodiranje (niz_barv)

Uporaba dekodiranja JSON v Python z deserializacijo