Wat is JSON?
JSON is een standaardformaat voor gegevensuitwisseling, dat is geïnspireerd op JavaScript. Over het algemeen is JSON in tekenreeks- of tekstindeling. JSON staat voor J ava S cript O bject N otation .
De syntaxis van JSON: JSON wordt geschreven als sleutel- en waardepaar.
{"Key": "Value","Key": "Value",}
JSON lijkt erg op het Python-woordenboek. Python ondersteunt JSON en het heeft een ingebouwde bibliotheek als JSON.
JSON-bibliotheek in Python
Om JSON-gerelateerde bewerkingen uit te voeren, zoals codering en decodering in Python, moet u eerst de JSON-bibliotheek importeren en daarvoor in uw .py- bestand,
import json
De volgende methoden zijn beschikbaar in de JSON-module
Methode | Omschrijving |
---|---|
stortplaatsen | codering naar JSON-objecten |
dump () | gecodeerde tekenreeks die in het bestand schrijft |
ladingen () | Decodeer de JSON-string |
laden() | Decoderen terwijl JSON-bestand wordt gelezen |
Python naar JSON (codering)
JSON Library of Python voert standaard de volgende vertaling van Python-objecten naar JSON-objecten uit
Python | JSON |
dict | Voorwerp |
lijst | Array |
unicode | Draad |
nummer - int, lang | nummer - int |
vlotter | nummer - echt |
Klopt | Klopt |
Vals | Vals |
Geen | Nul |
Het omzetten van Python-gegevens naar JSON wordt een coderingsbewerking genoemd. Codering wordt gedaan met behulp van de JSON-bibliotheekmethode - dumps ()
dumps () methode converteert woordenboekobject van python naar JSON-stringgegevensindeling.
Laten we nu ons eerste coderingsvoorbeeld uitvoeren met 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)
Uitgang:
{"person": {"name": "Kenn", "sex": "male", "age": 28}})
Laten we een JSON-bestand van het woordenboek maken met dezelfde functie 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)
Uitgang:
Niets te laten zien
… In uw systeem is json_file.json aangemaakt, u kunt dat bestand controleren.JSON naar Python (decodering)
JSON-string-decodering wordt gedaan met behulp van de ingebouwde methode load () & load () van de JSON-bibliotheek in Python. Hier toont de vertaaltabel een voorbeeld van JSON-objecten naar Python-objecten die handig zijn om decodering in Python van JSON-string uit te voeren.
JSON | Python |
Voorwerp | dict |
Array | lijst |
Draad | unicode |
nummer - int | nummer - int, lang |
nummer - echt | vlotter |
Klopt | Klopt |
Vals | Vals |
Nul | Geen |
Laten we een eenvoudig voorbeeld bekijken van decodering in Python met behulp van de functie 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'))
Uitgang:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}Type of dict_objPerson… {'name': 'John', 'sex': 'male'}
JSON-bestand decoderen of JSON-bestand parseren in Python
OPMERKING: het decoderen van het JSON-bestand is een bewerking met betrekking tot bestandsinvoer / -uitvoer (I / O). Het JSON-bestand moet op uw systeem aanwezig zijn op de opgegeven locatie die u in uw programma vermeldt.
Voorbeeld,
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)
Hier is data een woordenboekobject van Python.
Uitgang:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Compacte codering in Python
Als u de grootte van uw JSON-bestand moet verkleinen, kunt u compacte codering in Python gebruiken.
Voorbeeld,
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)
Uitgang:
'["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 **
Formaat JSON-code (mooie afdruk)
- Het doel is om goed opgemaakte code te schrijven voor menselijk begrip. Met behulp van mooie afdrukken kan iedereen de code gemakkelijk begrijpen.
- Voorbeeld,
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)
Uitgang:
{"a" : 4,"b" : 5}
Om dit beter te begrijpen, wijzigt u de inspringing in 40 en bekijkt u de output-
De JSON-code bestellen:
attribuut sort_keys in het argument van de functie dumps () sorteert de sleutel in JSON in oplopende volgorde. Het argument sort_keys is een Booleaans kenmerk. Als het waar is, is sorteren toegestaan, anders niet
Voorbeeld,
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)
Uitgang:
{"age": 45,"cars": [ {"model": "Audi A1","mpg": 15.1},{"model": "Zeep Compass","mpg": 18.1}],"children": [ "Alice","Bob"],"married": true,"name": "Ken","pets": ["Dog"]}
Zoals u kunt zien, zijn de leeftijd van de sleutels, auto's, kinderen, enz. Gerangschikt in oplopende volgorde.
Complexe objectcodering van Python
Een complex object heeft namelijk twee verschillende delen
- Echt deel
- Denkbeeldig deel
Voorbeeld: 3 + 2i
Voordat u codering van een complex object uitvoert, moet u controleren of een variabele complex is of niet. U moet een functie maken die de waarde controleert die in een variabele is opgeslagen met behulp van een instantiemethode.
Laten we de specifieke functie maken voor het controleren, object is complex of geschikt voor codering.
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)
Uitgang:
'[4.0, 5.0]'
Complexe JSON-objectdecodering in Python
Om een complex object in JSON te decoderen, gebruikt u een object_hook-parameter die controleert of de JSON-string het complexe object bevat of niet. Voorbeeld,
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)
Uitgang:
Complex_object… (4+5j)Without_complex_object… {'real': 6, 'img': 7}
Overzicht van JSON-serialisatieklasse JSONEncoder
De klasse JSONEncoder wordt gebruikt voor serialisering van elk Python-object tijdens het coderen. Het bevat drie verschillende coderingsmethoden, namelijk
- default (o) - Geïmplementeerd in de subklasse en retourneert serialiseringsobject voor o- object.
- encode (o) - Hetzelfde als de methode json.dumps () retourneert de JSON-reeks van de Python-gegevensstructuur.
- iterencode (o) - Geef string één voor één weer en codeer object o.
Met behulp van de methode encode () van de JSONEncoder-klasse kunnen we ook elk Python-object coderen.
# import JSONEncoder class from jsonfrom json.encoder import JSONEncodercolour_dict = { "colour": ["red", "yellow", "green" ]}# directly called encode method of JSONJSONEncoder().encode(colour_dict)
Uitgang:
'{"colour": ["red", "yellow", "green"]}'
Overzicht van JSON-deserialisatieklasse JSONDecoder
De klasse JSONDecoder wordt gebruikt voor deserialisatie van elk Python-object tijdens het decoderen. Het bevat drie verschillende decoderingsmethoden, namelijk
- default (o) - Geïmplementeerd in de subklasse en terug gedeserialiseerd object o object.
- decode (o) - Zelfde als json.loads () methode retour Python datastructuur van JSON string of data.
- raw_decode (o) - Vertegenwoordig Python-woordenboek één voor één en decodeer object o.
Met behulp van de decode () -methode van de JSONDecoder-klasse kunnen we ook de JSON-string decoderen.
import json# import JSONDecoder class from jsonfrom json.decoder import JSONDecodercolour_string = '{ "colour": ["red", "yellow"]}'# directly called decode method of JSONJSONDecoder().decode(colour_string)
Uitgang:
{'colour': ['red', 'yellow']}
JSON-gegevens decoderen van URL: Real Life-voorbeeld
We halen gegevens van CityBike NYC (Bike Sharing System) op van de gespecificeerde URL (https://feeds.citibikenyc.com/stations/stations.json) en converteren naar woordenboekformaat.
Voorbeeld,
OPMERKING: - Zorg ervoor dat de bibliotheek met verzoeken al in uw Python is geïnstalleerd, zo niet, open dan Terminal of CMD en typ
- (Voor Python 3 of hoger) pip3-installatieverzoeken
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])
Uitgang:
{'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': ''}
Uitzonderingen met betrekking tot JSON-bibliotheek in Python:
- Klasse json.JSONDecoderError behandelt de uitzondering die verband houdt met het decoderen. en het is een subklasse van ValueError.
- Uitzondering - json.JSONDecoderError (msg, doc)
- Parameters van uitzondering zijn,
- msg - Niet geformatteerd foutbericht
- doc - JSON-documenten geparseerd
- pos - start index van doc wanneer het is mislukt
- lineno - line no shows komen overeen met pos
- dubbele punt - kolom nr komt overeen met pos
Voorbeeld,
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")
Oneindige en NaN-getallen in Python
JSON Data Interchange Format (RFC - Request For Comments) staat geen oneindige of Nan-waarde toe, maar er is geen beperking in Python-JSON-bibliotheek om oneindige en Nan-waarde-gerelateerde bewerkingen uit te voeren. Als JSON het datatype INFINITE en Nan krijgt, wordt het omgezet in letterlijke.
Voorbeeld,
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))
Uitgang:
InfinityNaNinf
Herhaalde sleutel in JSON-tekenreeks
RFC geeft aan dat de sleutelnaam uniek moet zijn in een JSON-object, maar dit is niet verplicht. Python JSON-bibliotheek vormt geen uitzondering voor herhaalde objecten in JSON. Het negeert alle herhaalde sleutel / waarde-paren en beschouwt alleen het laatste sleutel / waarde-paar ervan.
- Voorbeeld,
import jsonrepeat_pair = '{"a": 1, "a": 2, "a": 3}'json.loads(repeat_pair)
Uitgang:
{'a': 3}
CLI (Command Line Interface) met JSON in Python
json.tool biedt de opdrachtregelinterface om de JSON pretty-print-syntaxis te valideren. Laten we een voorbeeld van CLI bekijken
$ echo '{"name" : "Kings Authur" }' | python3 -m json.tool
Uitgang:
{"name": " Kings Authur "}
Voordelen van JSON in Python
- Gemakkelijk om terug te gaan tussen container en waarde (JSON naar Python en Python naar JSON)
- Door mensen leesbaar (Pretty-print) JSON-object
- Veel gebruikt bij gegevensverwerking.
- Heeft niet dezelfde datastructuur in het enkele bestand.
Implementatiebeperking van JSON in Python
- In deserializer van JSON-bereik en voorspelling van een getal
- De maximale lengte van JSON-tekenreeks en arrays van JSON en nestniveaus van objecten.
Cheat code
json.dumps (person_data) |
Maak een JSON-object |
json.dump (person_data, file_write) |
Maak een JSON-bestand met behulp van File I / O van Python |
compact_obj = json.dumps (data, scheidingstekens = (',', ':')) |
Compact JSON-object door het spatie-teken uit het JSON-object te verwijderen met behulp van een scheidingsteken |
formatted_obj = json.dumps (dic, indent = 4, scheidingstekens = (',', ':')) |
JSON-code opmaken met Inspringing |
gesorteerde_string = json.dumps (x, indent = 4, sorteer-toetsen = Waar) |
JSON-objectsleutel sorteren op alfabetische volgorde |
complex_obj = json.dumps (4 + 5j, standaard = complexe_encode) |
Python Complex Object-codering in JSON |
JSONEncoder (). Coderen (colour_dict) |
Gebruik van JSONEncoder-klasse voor serialisering |
json.loads (data_string) |
Decodering van JSON-string in Python-woordenboek met behulp van de functie json.loads () |
json.loads ('{"__ complex__": true, "real": 4, "img": 5}', object_hook = is_complex) |
Decodering van complex JSON-object naar Python |
JSONDecoder (). Decoderen (colour_string) |
Gebruik van het decoderen van JSON naar Python met deserialisatie |