Was ist JSON?
JSON ist ein Standardformat für den Datenaustausch, das von JavaScript inspiriert ist. Im Allgemeinen liegt JSON im Zeichenfolgen- oder Textformat vor. JSON steht für J ava S cript O bject N otation.
Die Syntax von JSON: JSON wird als Schlüssel- und Wertepaar geschrieben.
{"Key": "Value","Key": "Value",}
JSON ist dem Python-Wörterbuch sehr ähnlich . Python unterstützt JSON und verfügt über eine integrierte Bibliothek als JSON.
JSON-Bibliothek in Python
Die externen Module ' marshal ' und ' pickle' von Python verwalten eine Version der JSON- Bibliothek. Um JSON-bezogene Operationen wie das Codieren und Decodieren in Python auszuführen, müssen Sie zuerst die JSON-Bibliothek importieren und dafür in Ihre .py- Datei.
import json
Die folgenden Methoden stehen im JSON-Modul zur Verfügung
Methode | Beschreibung |
---|---|
Dumps () | Codierung in JSON-Objekte |
dump () | codierte Zeichenfolge, die in eine Datei geschrieben wird |
Ladungen() | Dekodieren Sie die JSON-Zeichenfolge |
Belastung() | Dekodieren Sie, während die JSON-Datei gelesen wird |
Python zu JSON (Codierung)
Die JSON-Bibliothek von Python führt standardmäßig die folgende Übersetzung von Python-Objekten in JSON-Objekte durch
Python | JSON |
diktieren | Objekt |
Liste | Array |
Unicode | String |
number - int, long | Nummer - int |
schweben | Zahl - echt |
Wahr | Wahr |
Falsch | Falsch |
Keiner | Null |
Das Konvertieren von Python-Daten in JSON wird als Codierungsoperation bezeichnet. Die Codierung erfolgt mit Hilfe der JSON-Bibliotheksmethode - dumps ()
Die dumps () -Methode konvertiert das Wörterbuchobjekt von Python in das JSON-String-Datenformat.
Lassen Sie uns nun unser erstes Codierungsbeispiel mit Python durchführen.
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)
Ausgabe:
{"person": {"name": "Kenn", "sex": "male", "age": 28}})
Erstellen wir eine JSON-Datei des Wörterbuchs mit derselben Funktion 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)
Ausgabe:
Nichts zu zeigen
… In Ihrem System, in dem json_file.json erstellt wurde, können Sie diese Datei überprüfen.JSON zu Python (Dekodierung)
Die Dekodierung von JSON-Zeichenfolgen erfolgt mithilfe der integrierten Methode load () & load () der JSON-Bibliothek in Python. Hier zeigt die Übersetzungstabelle ein Beispiel für JSON-Objekte in Python-Objekte, die hilfreich sind, um eine JSON-Zeichenfolge in Python zu dekodieren.
JSON | Python |
Objekt | diktieren |
Array | Liste |
String | Unicode |
Nummer - int | number - int, long |
Zahl - echt | schweben |
Wahr | Wahr |
Falsch | Falsch |
Null | Keiner |
Sehen wir uns ein grundlegendes Beispiel für die Dekodierung in Python mit Hilfe der Funktion json.loads () an .
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'))
Ausgabe:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}Type of dict_objPerson… {'name': 'John', 'sex': 'male'}
JSON-Datei dekodieren oder JSON-Datei in Python analysieren
ANMERKUNG: Das Dekodieren einer JSON-Datei ist eine E / A-Operation (File Input / Output). Die JSON-Datei muss auf Ihrem System an dem in Ihrem Programm angegebenen Speicherort vorhanden sein.
Beispiel,
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 sind Daten ein Wörterbuchobjekt von Python.
Ausgabe:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Kompakte Codierung in Python
Wenn Sie die Größe Ihrer JSON-Datei reduzieren müssen, können Sie in Python eine kompakte Codierung verwenden.
Beispiel,
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)
Ausgabe:
'["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 **
JSON-Code formatieren (Hübscher Druck)
- Ziel ist es, gut formatierten Code für das menschliche Verständnis zu schreiben. Mit Hilfe des hübschen Druckens kann jeder den Code leicht verstehen.
- Beispiel,
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)
Ausgabe:
{"a" : 4,"b" : 5}
Um dies besser zu verstehen, ändern Sie den Einzug auf 40 und beobachten Sie die Ausgabe.
Bestellung des JSON-Codes:
Das Attribut sort_keys im Argument der Funktion dumps () sortiert den Schlüssel in JSON in aufsteigender Reihenfolge. Das Argument sort_keys ist ein boolesches Attribut. Wenn es wahr ist, ist das Sortieren sonst nicht erlaubt
Beispiel,
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)
Ausgabe:
{"age": 45,"cars": [ {"model": "Audi A1","mpg": 15.1},{"model": "Zeep Compass","mpg": 18.1}],"children": [ "Alice","Bob"],"married": true,"name": "Ken","pets": ["Dog"]}
Wie Sie vielleicht beobachten können, sind das Alter der Schlüssel, Autos, Kinder usw. in aufsteigender Reihenfolge angeordnet.
Komplexe Objektcodierung von Python
Ein komplexes Objekt besteht aus zwei verschiedenen Teilen
- Realteil
- Imaginärteil
Beispiel: 3 + 2i
Bevor Sie die Codierung eines komplexen Objekts durchführen, müssen Sie überprüfen, ob eine Variable komplex ist oder nicht. Sie müssen eine Funktion erstellen, die den in einer Variablen gespeicherten Wert mithilfe einer Instanzmethode überprüft.
Lassen Sie uns die spezifische Funktion für das Prüfobjekt erstellen, das komplex ist oder für die Codierung geeignet ist.
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)
Ausgabe:
'[4.0, 5.0]'
Komplexe JSON-Objektdecodierung in Python
Verwenden Sie zum Dekodieren komplexer Objekte in JSON einen Parameter object_hook, der überprüft, ob die JSON-Zeichenfolge das komplexe Objekt enthält oder nicht. Beispiel,
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)
Ausgabe:
Complex_object… (4+5j)Without_complex_object… {'real': 6, 'img': 7}
Übersicht über den JSONncoder der JSON-Serialisierungsklasse
Die JSONEncoder-Klasse wird zur Serialisierung eines Python-Objekts während der Codierung verwendet. Es enthält drei verschiedene Codierungsmethoden:
- default (o) - Wird in der Unterklasse implementiert und gibt das Serialisierungsobjekt für das o- Objekt zurück.
- encode (o) - Entspricht der Methode json.dumps (), die eine JSON-Zeichenfolge der Python-Datenstruktur zurückgibt.
- iterencode (o) - Stellt die Zeichenfolge einzeln dar und codiert das Objekt o.
Mit Hilfe der encode () -Methode der JSONEncoder-Klasse können wir auch jedes Python-Objekt codieren.
# import JSONEncoder class from jsonfrom json.encoder import JSONEncodercolour_dict = { "colour": ["red", "yellow", "green" ]}# directly called encode method of JSONJSONEncoder().encode(colour_dict)
Ausgabe:
'{"colour": ["red", "yellow", "green"]}'
Übersicht über die JSON-Deserialisierungsklasse JSONDecoder
Die JSONDecoder-Klasse wird zum Deserialisieren eines Python-Objekts während der Dekodierung verwendet. Es enthält drei verschiedene Dekodierungsmethoden:
- default (o) - In der Unterklasse implementiert und deserialisiertes Objekt o Objekt zurückgeben.
- decode (o) - Entspricht der Methode json.loads (), die die Python-Datenstruktur der JSON-Zeichenfolge oder -Daten zurückgibt.
- raw_decode (o) - Repräsentiert das Python-Wörterbuch nacheinander und dekodiert das Objekt o.
Mit Hilfe der decode () -Methode der JSONDecoder-Klasse können wir auch JSON-Strings decodieren.
import json# import JSONDecoder class from jsonfrom json.decoder import JSONDecodercolour_string = '{ "colour": ["red", "yellow"]}'# directly called decode method of JSONJSONDecoder().decode(colour_string)
Ausgabe:
{'colour': ['red', 'yellow']}
Dekodieren von JSON-Daten von der URL: Beispiel aus dem wirklichen Leben
Wir werden Daten von CityBike NYC (Bike Sharing System) von der angegebenen URL (https://feeds.citibikenyc.com/stations/stations.json) abrufen und in das Wörterbuchformat konvertieren.
Beispiel,
HINWEIS: - Stellen Sie sicher, dass die Anforderungsbibliothek bereits in Ihrem Python installiert ist. Wenn nicht, öffnen Sie Terminal oder CMD und geben Sie ein
- (Für Python 3 oder höher) pip3-Installationsanforderungen
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])
Ausgabe:
{'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': ''}
Ausnahmen im Zusammenhang mit der JSON-Bibliothek in Python:
- Die Klasse json.JSONDecoderError behandelt die Ausnahme im Zusammenhang mit der Decodierungsoperation. und es ist eine Unterklasse von ValueError.
- Ausnahme - json.JSONDecoderError (msg, doc)
- Parameter der Ausnahme sind:
- msg - Unformatierte Fehlermeldung
- doc - JSON-Dokumente analysiert
- pos - Startindex des Dokuments, wenn es fehlgeschlagen ist
- lineno - line no show entsprechen pos
- Doppelpunkt - Spalte Nr. entspricht Pos
Beispiel,
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")
Unendliche und NaN-Zahlen in Python
Das JSON-Datenaustauschformat (RFC - Request For Comments) erlaubt keine unendlichen oder nanowertigen Werte, aber in der Python-JSON-Bibliothek gibt es keine Einschränkung für die Ausführung von unendlichen und nanowertbezogenen Vorgängen. Wenn JSON den Datentyp INFINITE und Nan erhält, wird er in ein Literal konvertiert.
Beispiel,
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))
Ausgabe:
InfinityNaNinf
Wiederholter Schlüssel in JSON String
RFC gibt an, dass der Schlüsselname in einem JSON-Objekt eindeutig sein soll, dies ist jedoch nicht obligatorisch. Die Python-JSON-Bibliothek löst keine Ausnahme für wiederholte Objekte in JSON aus. Es ignoriert alle wiederholten Schlüssel-Wert-Paare und berücksichtigt nur das letzte Schlüssel-Wert-Paar unter ihnen.
- Beispiel,
import jsonrepeat_pair = '{"a": 1, "a": 2, "a": 3}'json.loads(repeat_pair)
Ausgabe:
{'a': 3}
CLI (Command Line Interface) mit JSON in Python
json.tool bietet die Befehlszeilenschnittstelle zum Überprüfen der JSON-Syntax für hübsche Drucke. Sehen wir uns ein Beispiel für CLI an
$ echo '{"name" : "Kings Authur" }' | python3 -m json.tool
Ausgabe:
{"name": " Kings Authur "}
Vorteile von JSON in Python
- Einfacher Wechsel zwischen Container und Wert (JSON zu Python und Python zu JSON)
- Vom Menschen lesbares (Pretty-Print) JSON-Objekt
- Weit verbreitet in der Datenverarbeitung.
- Hat nicht die gleiche Datenstruktur in der einzelnen Datei.
Implementierungsbeschränkung von JSON in Python
- Im Deserializer des JSON-Bereichs und Vorhersage einer Zahl
- Die maximale Länge der JSON-Zeichenfolge und der Arrays der JSON- und Verschachtelungsebenen des Objekts.
Cheat Code
json.dumps (person_data) |
JSON-Objekt erstellen |
json.dump (person_data, file_write) |
Erstellen Sie eine JSON-Datei mit File I / O von Python |
compact_obj = json.dumps (Daten, Trennzeichen = (',', ':')) |
Kompaktes JSON-Objekt durch Entfernen des Leerzeichens aus dem JSON-Objekt mithilfe eines Trennzeichens |
formatted_obj = json.dumps (dic, indent = 4, separators = (',', ':')) |
Formatieren von JSON-Code mit Einzug |
sortiert_string = json.dumps (x, Einzug = 4, sort_keys = True) |
Sortieren des JSON-Objektschlüssels nach alphabetischer Reihenfolge |
complex_obj = json.dumps (4 + 5j, default = complex_encode) |
Codierung komplexer Python-Objekte in JSON |
JSONEncoder (). Codieren (colour_dict) |
Verwendung der JSONEncoder-Klasse zur Serialisierung |
json.loads (data_string) |
Dekodieren von JSON-Zeichenfolgen im Python-Wörterbuch mit der Funktion json.loads () |
json.loads ('{"__ complex__": true, "real": 4, "img": 5}', object_hook = is_complex) |
Dekodierung eines komplexen JSON-Objekts in Python |
JSONDecoder (). Decode (colour_string) |
Verwendung der Dekodierung von JSON in Python mit Deserialisierung |