Hvad er JSON?
JSON er et standardformat til dataudveksling, som er inspireret af JavaScript. Generelt er JSON i streng- eller tekstformat. JSON står for J ava S cript O bject N otation .
Syntaksen for JSON: JSON skrives som nøgle- og værdipar.
{"Key": "Value","Key": "Value",}
JSON minder meget om Python-ordbogen. Python understøtter JSON, og det har et indbygget bibliotek som en JSON.
JSON-bibliotek i Python
' marshal ' og ' pickle' eksterne moduler af Python opretholder en version af JSON- biblioteket. For at udføre JSON-relaterede operationer som kodning og afkodning i Python skal du først importere JSON-biblioteket og til det i din .py- fil,
import json
Følgende metoder er tilgængelige i JSON-modulet
Metode | Beskrivelse |
---|---|
lossepladser () | kodning til JSON-objekter |
dump () | kodet strengskrivning på fil |
belastninger () | Afkode JSON-strengen |
belastning() | Afkod, mens JSON-filen læses |
Python til JSON (kodning)
JSON Library of Python udfører som standard følgende oversættelse af Python-objekter til JSON-objekter
Python | JSON |
diktere | Objekt |
liste | Array |
unicode | Snor |
nummer - int, lang | nummer - int |
flyde | nummer - ægte |
Sand | Sand |
Falsk | Falsk |
Ingen | Nul |
Konvertering af Python-data til JSON kaldes en kodningsoperation. Kodning udføres ved hjælp af JSON-biblioteksmetoden - dumps ()
dumps () -metoden konverterer ordbogens objekt til python til JSON-strengdataformat.
Lad os nu udføre vores første kodeeksempel med Python.
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)
Produktion:
{"person": {"name": "Kenn", "sex": "male", "age": 28}})
Lad os oprette en JSON-fil af ordbogen ved hjælp af samme funktionsdump ()
# 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)
Produktion:
Intet at vise
… I dit system oprettes json_file.json, du kan kontrollere den fil.JSON til Python (afkodning)
JSON-strengafkodning udføres ved hjælp af indbygget metodeindlæsning () og indlæsning () af JSON-bibliotek i Python. Her viser oversættelsestabellen et eksempel på JSON-objekter til Python-objekter, som er nyttige til at udføre afkodning i Python af JSON-streng.
JSON | Python |
Objekt | diktere |
Array | liste |
Snor | unicode |
nummer - int | nummer - int, lang |
nummer - ægte | flyde |
Sand | Sand |
Falsk | Falsk |
Nul | Ingen |
Lad os se et grundlæggende eksempel på afkodning i Python ved hjælp af json.loads () -funktionen,
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'))
Produktion:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}Type of dict_objPerson… {'name': 'John', 'sex': 'male'}
Afkodning af JSON-fil eller parsing af JSON-fil i Python
BEMÆRK: Afkodning af JSON-filen er File Input / Output (I / O) -relateret handling. JSON-filen skal findes på dit system på det angivne sted, som du nævner i dit program.
Eksempel,
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)
Her er data et ordbogobjekt for Python.
Produktion:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Kompakt kodning i Python
Når du har brug for at reducere størrelsen på din JSON-fil, kan du bruge kompakt kodning i Python.
Eksempel,
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)
Produktion:
'["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 **
Formatér JSON-kode (smuk udskrift)
- Målet er at skrive velformateret kode til menneskelig forståelse. Ved hjælp af smuk udskrivning kan alle let forstå koden.
- Eksempel,
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)
Produktion:
{"a" : 4,"b" : 5}
For bedre at forstå dette skal du ændre indrykning til 40 og observere output-
Bestilling af JSON-koden:
sort_keys attribut i dumps () -funktionens argument sorterer nøglen i JSON i stigende rækkefølge. Argumentet sort_keys er en boolsk attribut. Når det er sandt, er sortering tilladt ellers ikke
Eksempel,
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)
Produktion:
{"age": 45,"cars": [ {"model": "Audi A1","mpg": 15.1},{"model": "Zeep Compass","mpg": 18.1}],"children": [ "Alice","Bob"],"married": true,"name": "Ken","pets": ["Dog"]}
Som du kan observere nøglenes alder, er biler, børn osv. Arrangeret i stigende rækkefølge.
Kompleks objektkodning af Python
Et komplekst objekt har to forskellige dele, dvs.
- Virkelig del
- Imaginær del
Eksempel: 3 + 2i
Inden du udfører kodning af et komplekst objekt, skal du kontrollere, at en variabel er kompleks eller ej. Du skal oprette en funktion, der kontrollerer værdien, der er gemt i en variabel ved hjælp af en instansmetode.
Lad os oprette den specifikke funktion til kontrolobjekt er kompleks eller kvalificeret til kodning.
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)
Produktion:
'[4.0, 5.0]'
Kompleks JSON-objektafkodning i Python
For at afkode komplekst objekt i JSON skal du bruge en objekt_hook-parameter, der kontrollerer, at JSON-streng indeholder det komplekse objekt eller ej. Eksempel,
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)
Produktion:
Complex_object… (4+5j)Without_complex_object… {'real': 6, 'img': 7}
Oversigt over JSON Serialization klasse JSONEncoder
JSONEncoder-klassen bruges til serialisering af ethvert Python-objekt, mens der udføres kodning. Den indeholder tre forskellige metoder til kodning, som er
- standard (o) - Implementeret i underklassen og returner serialiseringsobjekt til o- objekt.
- kode (o) - Samme som json.dumps () metode returnerer JSON-streng af Python-datastruktur.
- iterencode (o) - repræsentere streng en efter en og kode objekt o.
Ved hjælp af encode () -metoden i JSONEncoder-klassen kan vi også kode ethvert Python-objekt.
# import JSONEncoder class from jsonfrom json.encoder import JSONEncodercolour_dict = { "colour": ["red", "yellow", "green" ]}# directly called encode method of JSONJSONEncoder().encode(colour_dict)
Produktion:
'{"colour": ["red", "yellow", "green"]}'
Oversigt over JSON Deserialization klasse JSONDecoder
JSONDecoder-klassen bruges til deserialisering af ethvert Python-objekt under afkodning. Den indeholder tre forskellige metoder til afkodning, som er
- standard (o) - Implementeret i underklassen og returneret deserialiseret objekt o objekt.
- dekode (o) - Samme som metoden json.loads () returnerer Python-datastruktur af JSON-streng eller data.
- raw_decode (o) - repræsentere Python-ordbog en efter en og afkode objekt o.
Ved hjælp af decode () -metoden i JSONDecoder-klassen kan vi også afkode JSON-streng.
import json# import JSONDecoder class from jsonfrom json.decoder import JSONDecodercolour_string = '{ "colour": ["red", "yellow"]}'# directly called decode method of JSONJSONDecoder().decode(colour_string)
Produktion:
{'colour': ['red', 'yellow']}
Afkodning af JSON-data fra URL: Eksempel på virkelige liv
Vi henter data fra CityBike NYC (Bike Sharing System) fra specificeret URL (https://feeds.citibikenyc.com/stations/stations.json) og konverterer til ordbogformat.
Eksempel,
BEMÆRK: - Sørg for, at anmodningsbiblioteket allerede er installeret i din Python, hvis ikke så åbn Terminal eller CMD og skriv
- (For Python 3 eller derover) pip3 installationsanmodninger
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])
Produktion:
{'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': ''}
Undtagelser relateret til JSON-biblioteket i Python:
- Klasse json.JSONDecoderError håndterer undtagelsen relateret til afkodning. og det er en underklasse af ValueError.
- Undtagelse - json.JSONDecoderError (msg, doc)
- Undtagelsesparametre er,
- msg - Uformateret fejlmeddelelse
- doc - JSON docs analyseret
- pos - start indeks for doc, når det mislykkedes
- lineno - linje ingen forestillinger svarer til pos
- kolon - kolonne nr. svarer til pos
Eksempel,
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")
Uendelige og NaN-tal i Python
JSON Data Interchange Format (RFC - Request for Comments) tillader ikke Infinite eller Nan Value, men der er ingen begrænsning i Python-JSON Library til at udføre Infinite og Nan Value-relateret handling. Hvis JSON får INFINITE og Nan datatype, end det konverteres til bogstavelig.
Eksempel,
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))
Produktion:
InfinityNaNinf
Gentagen nøgle i JSON-streng
RFC angiver, at nøglenavnet skal være unikt i et JSON-objekt, men det er ikke obligatorisk. Python JSON-biblioteket hæver ikke en undtagelse for gentagne objekter i JSON. Det ignorerer alle gentagne nøgleværdipar og betragter kun det sidste nøgleværdipar blandt dem.
- Eksempel,
import jsonrepeat_pair = '{"a": 1, "a": 2, "a": 3}'json.loads(repeat_pair)
Produktion:
{'a': 3}
CLI (Command Line Interface) med JSON i Python
json.tool giver kommandolinjegrænsefladen til validering af JSON-syntaks med smuk udskrivning. Lad os se et eksempel på CLI
$ echo '{"name" : "Kings Authur" }' | python3 -m json.tool
Produktion:
{"name": " Kings Authur "}
Fordele ved JSON i Python
- Let at flytte tilbage mellem container og værdi (JSON til Python og Python til JSON)
- Menneskeligt læsbart (smukt printet) JSON-objekt
- Udbredt i datahåndtering.
- Har ikke den samme datastruktur i den enkelte fil.
Implementeringsbegrænsning af JSON i Python
- I deserializer af JSON rækkevidde og forudsigelse af et nummer
- Den maksimale længde af JSON-streng og arrays af JSON og indlejrede niveauer af objekt.
Snydekode
json.dumps (person_data) |
Opret JSON-objekt |
json.dump (person_data, file_write) |
Opret JSON-fil ved hjælp af fil I / O af Python |
compact_obj = json.dumps (data, separatorer = (',', ':')) |
Kompakt JSON-objekt ved at fjerne mellemrumstegn fra JSON-objekt ved hjælp af separator |
formatted_obj = json.dumps (dic, indent = 4, separators = (',', ':')) |
Formatering af JSON-kode ved hjælp af indrykning |
sorted_string = json.dumps (x, indrykning = 4, sort_keys = True) |
Sortering af JSON-objektnøgle i alfabetisk rækkefølge |
complex_obj = json.dumps (4 + 5j, standard = complex_encode) |
Python Complex Object-kodning i JSON |
JSONEncoder (). Kode (colour_dict) |
Brug af JSONEncoder-klasse til serialisering |
json.loads (data_string) |
Afkodning af JSON-streng i Python-ordbog ved hjælp af funktionen json.loads () |
json.loads ('{"__ complex__": true, "real": 4, "img": 5}', object_hook = is_complex) |
Afkodning af komplekst JSON-objekt til Python |
JSONDecoder (). Afkode (colour_string) |
Brug af afkodning af JSON til Python med deserialisering |