Python JSON: Kodieren (Dumps), Dekodieren (Laden) und Lesen der JSON-Datei
Was ist JSON in Python?
JSON in Python ist ein Standardformat, inspiriert von JavaSkript für den Datenaustausch und die Datenübertragung als Textformat über ein Netzwerk. Im Allgemeinen liegt JSON im String- oder Textformat vor. Es kann von APIs und Datenbanken verwendet werden und stellt Objekte als Name/Wert-Paare dar. JSON steht für JavaSkriptobjektnotation.
Python JSON-Syntax:
JSON wird als Schlüssel-Wert-Paar geschrieben.
{ "Key": "Value", "Key": "Value", }
JSON ist sehr ähnlich Python Wörterbuch. Python unterstützt JSON und verfügt über eine integrierte Bibliothek als JSON.
JSON-Bibliothek in Python
'Marschall' und 'Essiggurke' externe Module von Python pflegen Sie eine Version von JSON Python Bibliothek. Arbeiten mit JSON in Python Um JSON-bezogene Operationen wie Kodierung und Dekodierung durchzuführen, müssen Sie zuerst importieren JSON-Bibliothek und dafür in Ihrer .py Datei,
import json
Die folgenden Methoden sind im JSON verfügbar Python Modulen
Methodik | Beschreibung |
---|---|
Dumps () | Kodierung in JSON-Objekte |
dump () | Schreiben einer codierten Zeichenfolge in eine Datei |
Ladungen() | Dekodieren Sie die JSON-Zeichenfolge |
Belastung() | Dekodieren Sie, während die JSON-Datei gelesen wird |
Python zu JSON (Kodierung)
JSON Bibliothek von Python führt folgende Übersetzung durch Python Objekte standardmäßig in JSON-Objekte
Python | JSON |
---|---|
diktieren | Betreff |
Liste | Feld |
Unicode | Schnur |
Zahl – int, long | Zahl – int |
schweben | Zahl – real |
Wahre | Wahre |
falsch | falsch |
Non | Null |
weiterverarbeitende Industrie Python Daten in JSON wird als Kodierungsvorgang bezeichnet. Die Kodierung erfolgt mithilfe der JSON-Bibliotheksmethode – Dumps ()
JSON dumps() in Python
json.dumps() in Python ist eine Methode, die Dictionary-Objekte von Python in das JSON-String-Datenformat. Dies ist nützlich, wenn die Objekte für Vorgänge wie Parsen, Drucken usw. im String-Format vorliegen müssen.
Lassen Sie uns nun unser erstes json.dumps-Kodierungsbeispiel durchführen mit 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)
Ausgang:
{"person": {"name": "Kenn", "sex": "male", "age": 28}})
Sehen wir uns ein Beispiel an Python write JSON to file zum Erstellen einer JSON-Datei des Wörterbuchs mit derselben Funktion 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)
Ausgang:
Nichts zu zeigen… In Ihrem System wird json_file.json erstellt. Sie können diese Datei wie unten gezeigt überprüfen und JSON in Datei schreiben Python Beispiel.
JSON in Python (Dekodierung)
Die Dekodierung von JSON-Strings erfolgt mithilfe einer integrierten Methode json.loads() & json.load() der JSON-Bibliothek in Python. Hier Übersetzungstabelle zeigt Beispiel von JSON-Objekten zu Python Objekte die hilfreich sind, um die Dekodierung durchzuführen in Python der JSON-Zeichenfolge.
JSON | Python |
---|---|
Betreff | diktieren |
Feld | Liste |
Schnur | Unicode |
Zahl – int | Zahl – int, long |
Zahl – real | schweben |
Wahre | Wahre |
falsch | falsch |
Null | Non |
Sehen wir uns eine einfache JSON-Analyse an Python Beispiel für die Dekodierung mit Hilfe von json.loads Funktion,
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'))
Ausgang:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}} Type of dict_obj <class 'dict'> Person...... {'name': 'John', 'sex': 'male'}
Dekodieren einer JSON-Datei oder Parsen einer JSON-Datei in Python
Jetzt lernen wir, wie man JSON-Dateien liest in Python mit Python Beispiel zum Parsen von JSON:
Anmerkungen: Das Dekodieren einer JSON-Datei ist eine Datei-Eingabe/Ausgabe (E/A). Die JSON-Datei muss auf Ihrem System an dem in Ihrem Programm angegebenen Speicherort vorhanden sein.
Python JSON-Datei lesen Beispiel:
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)
Hier Daten ist ein Dictionary-Objekt von Python wie in der oben eingelesenen JSON-Datei dargestellt Python Beispiel.
Ausgang:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Kompakte Kodierung in Python
Wenn Sie die Größe Ihrer JSON-Datei reduzieren müssen, können Sie die Kompaktkodierung verwenden in Python.
Beispiel
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)
Ausgang:
'["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 (schöner Druck)
- Ziel ist es, gut formatierten Code für das menschliche Verständnis zu schreiben. Mit Hilfe hübscher Drucke kann jeder den Code leicht verstehen.
Ejemplo:
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)
Ausgang:
{ "a" : 4, "b" : 5 }
Um dies besser zu verstehen, ändern Sie den Einzug in 40 und beobachten Sie die Ausgabe.
Bestellung des JSON-Codes:
sort_keys Attribut in Python Das Argument der Funktion dumps sortiert den Schlüssel in JSON in aufsteigender Reihenfolge. Das Argument sort_keys ist ein Boolean-Attribut. Wenn es wahr ist, ist die Sortierung zulässig, andernfalls nicht. Lassen Sie uns das mit Python Beispiel für die Sortierung von Zeichenfolgen nach JSON.
Beispiel
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)
Ausgang:
{ "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 sehen können, sind die Schlüssel nach Alter, Autos, Kindern usw. in aufsteigender Reihenfolge angeordnet.
Komplexe Objektkodierung von Python
Ein komplexes Objekt besteht aus zwei verschiedenen Teilen, d.h.
- Realteil
- Imaginärer Teil
Beispiel: 3 +2i
Bevor Sie die Kodierung eines komplexen Objekts durchführen, müssen Sie prüfen, ob eine Variable komplex ist oder nicht. Sie müssen eine Funktion erstellen, die den in einer Variablen gespeicherten Wert mithilfe einer Instanzmethode prüft.
Lassen Sie uns die spezielle Funktion erstellen, um zu überprüfen, ob das Objekt komplex ist oder für die Kodierung geeignet ist.
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)
Ausgang:
'[4.0, 5.0]'
Komplexe JSON-Objektdekodierung in Python
Um komplexe Objekte in JSON zu dekodieren, verwenden Sie einen object_hook-Parameter, der prüft, ob die JSON-Zeichenfolge das komplexe Objekt enthält oder nicht. Lassen Sie uns verstehen, wie man Zeichenfolgen in JSON umwandelt Python Beispiel
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)
Ausgang:
Complex_object...... (4+5j) Without_complex_object...... {'real': 6, 'img': 7}
Übersicht über die JSON-Serialisierungsklasse JSONEncoder
Die Klasse JSONEncoder wird zur Serialisierung von Python Objekt während der Kodierung. Es enthält drei verschiedene Kodierungsmethoden, die
- Standard(o) – In der Unterklasse implementiert und gibt ein Serialisierungsobjekt für zurück o Objekt.
- kodieren(o) – Das Gleiche wie JSON-Dumps Python Methode gibt JSON-Zeichenfolge zurück von Python Datenstruktur.
- iterencode(o) – Stellen Sie die Zeichenfolge einzeln dar und kodieren Sie das Objekt o.
Mithilfe der encode()-Methode der JSONEncoder-Klasse können wir auch beliebige Python Objekt wie unten gezeigt Python Beispiel für einen JSON-Encoder.
# 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)
Ausgang:
'{"colour": ["red", "yellow", "green"]}'
Übersicht über die JSON-Deserialisierungsklasse JSONDecoder
Die Klasse JSONDecoder wird zur Deserialisierung von Python Objekt während der Decodierung. Es enthält drei verschiedene Decodierungsmethoden, die
- Standard(o) – In der Unterklasse implementiert und deserialisiertes Objekt zurückgeben o Objekt.
- dekodieren(o) – Gleich wie die Rückgabe der Methode json.loads() Python Datenstruktur einer JSON-Zeichenfolge oder von JSON-Daten.
- raw_decode(o) – Darstellen Python Wörterbuch nacheinander durchgehen und Objekt o dekodieren.
Mithilfe der decode()-Methode der JSONDecoder-Klasse können wir auch JSON-Zeichenfolgen dekodieren, wie unten gezeigt Python Beispiel für einen JSON-Decoder.
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)
Ausgang:
{'colour': ['red', 'yellow']}
JSON-Daten aus URL dekodieren: Beispiel aus dem wirklichen Leben
Wir werden Daten von CityBike NYC (Bike-Sharing-System) von der angegebenen URL abrufen (https://gbfs.citibikenyc.com/gbfs/2.3/gbfs.json) und in das Wörterbuchformat konvertieren.
Python JSON aus Datei laden Beispiel:
HINWEIS: - Stellen Sie sicher, dass die Anforderungsbibliothek bereits in Ihrem Python, Wenn nicht, öffnen Sie Terminal oder CMD und geben Sie ein
- (Zum Python 3 oder höher) pip3-Installationsanfragen
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])
Ausgang:
<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': '' }
Ausnahmen im Zusammenhang mit der JSON-Bibliothek in Python:
- Klasse json.JSONDecoderError behandelt die Ausnahme im Zusammenhang mit der Dekodierungsoperation. und es ist eine Unterklasse von Wertfehler.
- Ausnahme - json.JSONDecoderError(msg, doc)
- Parameter der Ausnahme sind:
- msg – Unformatierte Fehlermeldung
- doc – JSON-Dokumente analysiert
- pos – Index des Dokuments starten, wenn es fehlschlägt
- lineno – Zeile Nichterscheinen entsprechen Pos
- Doppelpunkt – Spalte Nr. entspricht Pos
Python JSON aus Datei laden Beispiel:
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")
Unendlich und NaN Numbers in Python
Das JSON Data Interchange Format (RFC – Request For Comments) erlaubt keine unendlichen oder Nano-Werte, aber es gibt keine Einschränkung in Python- JSON-Bibliothek zum Durchführen von Operationen mit unendlichen und Nan-Werten. Wenn JSON die Datentypen INFINITE und Nan erhält, wird es in Literale umgewandelt.
Beispiel
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))
Ausgang:
Infinity <class 'str'> NaN inf <class 'float'>
Wiederholter Schlüssel im JSON-String
RFC gibt an, dass der Schlüsselname in einem JSON-Objekt eindeutig sein sollte, dies ist jedoch nicht zwingend. Python Die JSON-Bibliothek löst keine Ausnahme für wiederholte Objekte in JSON aus. Sie ignoriert alle wiederholten Schlüssel-Wert-Paare und berücksichtigt nur das letzte Schlüssel-Wert-Paar unter ihnen.
- Beispiel
import json repeat_pair = '{"a": 1, "a": 2, "a": 3}' json.loads(repeat_pair)
Ausgang:
{'a': 3}
CLI (Command Line Interface) mit JSON in Python
json.tool stellt die Befehlszeilenschnittstelle zur Validierung der JSON-Pretty-Print-Syntax bereit. Sehen wir uns ein Beispiel für CLI an
$ echo '{"name" : "Kings Authur" }' | python3 -m json.tool
Ausgang:
{ "name": " Kings Authur " }
Vorteile von JSON in Python
- Einfaches Zurückwechseln zwischen Container und Wert (JSON zu Python sowie Python in JSON)
- Für Menschen lesbares (Pretty-Print) JSON-Objekt
- Weit verbreitet in der Datenverarbeitung.
- Die einzelne Datei weist nicht dieselbe Datenstruktur auf.
Implementierungsbeschränkungen von JSON in Python
- Im Deserialisierer des JSON-Bereichs und Vorhersage einer Zahl
- Die maximale Länge der JSON-Zeichenfolge und der JSON-Arrays sowie der Verschachtelungsebenen des Objekts.
Python JSON-Spickzettel
Python JSON-Funktion | Beschreibung |
---|---|
json.dumps(person_data) | Erstellen Sie ein JSON-Objekt |
json.dump(person_data, file_write) | Erstellen Sie eine JSON-Datei mit der Datei-E/A von Python |
compact_obj = json.dumps(data, Separatoren=(',',':')) | Komprimieren Sie das JSON-Objekt, indem Sie mithilfe des Trennzeichens Leerzeichen aus dem JSON-Objekt entfernen |
formatted_obj = json.dumps(dic, indent=4, Separatoren=(',', ': ')) | Formatieren von JSON-Code mit Indent |
sorted_string = json.dumps(x, indent=4, sort_keys=True) | Sortieren des JSON-Objektschlüssels nach alphabetischer Reihenfolge |
komplexes_Objekt = json.dumps(4 + 5j, Standard=komplexe_Codecodierung) | Python Komplexe Objektkodierung in JSON |
JSONEncoder().encode(colour_dict) | Verwendung der JSONEncoder-Klasse für die Serialisierung |
json.loads(data_string) | Dekodieren von JSON-Strings in Python Wörterbuch mit der Funktion json.loads() |
json.loads('{„__complex__“: true, „real“: 4, „img“: 5}', Objekt-Hook = ist komplex) | Dekodierung komplexer JSON-Objekte in Python |
JSONDecoder().decode(colour_string) | Verwendung der Dekodierung von JSON für Python mit Deserialisierung |