Python JSON: Codieren (Dumps), Decodieren (Laden) und JSON-Datei lesen

Was ist JSON in Python?

JSON in Python ist ein von JavaScript inspiriertes Standardformat 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 JavaScript Object Notation.

Python-JSON-Syntax:

JSON wird als Schlüssel-Wert-Paar 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

'Marschall' und 'Essiggurke' Externe Module von Python verwalten eine Version von JSON Python-Bibliothek. Wenn Sie mit JSON in Python arbeiten, um JSON-bezogene Vorgänge wie Codierung und Decodierung auszuführen, müssen Sie zunächst Folgendes tun importieren JSON-Bibliothek und dafür in Ihrer .py Datei,

import json

Following Methoden sind im JSON-Python-Modul verfügbar

Versandart 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 Die Python-Bibliothek führt Folgendes auswing Standardmäßig werden Python-Objekte in JSON-Objekte übersetzt

Python JSON
diktieren Betreff
Liste Feld
Unicode Schnur
Zahl – int, long Zahl – int
schweben Zahl – real
Wahre Wahre
falsch falsch
Andere Null

Das Konvertieren von Python-Daten in JSON wird als Kodierungsvorgang bezeichnet. Die Kodierung erfolgt mit Hilfe der JSON-Bibliotheksmethode – Dumps ()

JSON dumps() in Python

json.dumps() in Python ist eine Methode, die Wörterbuchobjekte von Python in das JSON-String-Datenformat konvertiert. 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-Codierungsbeispiel mit Python durchführen:

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 dafür an, wie Python JSON in eine Datei schreibt, um mit derselben Funktion eine JSON-Datei des Wörterbuchs zu erstellen 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 überprüfen, wie im folgenden Python-Beispiel zum Schreiben von JSON in eine Datei gezeigt.

Beispiel für die Python-JSON-Kodierung

JSON zu Python (Dekodierung)

Die Dekodierung von JSON-Strings erfolgt mithilfe einer integrierten Methode json.loads() & json.load() der JSON-Bibliothek in Python. Hier zeigt die Übersetzungstabelle ein Beispiel für JSON-Objekte Python-Objekte die hilfreich sind, um die Dekodierung von JSON-Strings in Python durchzuführen.

JSON Python
Betreff diktieren
Feld Liste
Schnur Unicode
Zahl – int Zahl – int, long
Zahl – real schweben
Wahre Wahre
falsch falsch
Null Andere

Sehen wir uns ein einfaches Beispiel für die JSON-Python-Dekodierung mithilfe von an 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'}

Beispiel für die Python-JSON-Dekodierung

JSON-Datei dekodieren oder JSON-Datei in Python analysieren

Jetzt lernen wir, wie man eine JSON-Datei in Python mit dem Python-Parse-JSON-Beispiel liest:

Anmerkungen: Das Dekodieren einer JSON-Datei ist ein mit der Dateieingabe/-ausgabe (I/O) verbundener Vorgang. Die JSON-Datei muss auf Ihrem System an dem angegebenen Speicherort vorhanden sein, den Sie in Ihrem Programm angeben.

Python liest eine JSON-Datei. 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 Wörterbuchobjekt von Python, wie im obigen Python-Beispiel zum Lesen einer JSON-Datei gezeigt.

Ausgang:

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

JSON-Datei in Python analysieren

Kompakte Kodierung in Python

Wenn Sie die Größe Ihrer JSON-Datei reduzieren müssen, können Sie die kompakte Codierung in Python verwenden.

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.

Beispiel:

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
}

Beispiel für das Formatieren eines JSON-Codes

Um dies besser zu verstehen, ändern Sie den Einzug in 40 und beobachten Sie die Ausgabe.

Beispiel für das Formatieren eines JSON-Codes

Bestellung des JSON-Codes:

sort_keys Das Attribut im Argument der Python-Dumps-Funktion sortiert den Schlüssel in JSON in aufsteigender Reihenfolge. Das Argument sort_keys ist ein boolesches Attribut. Wenn es wahr ist, ist das Sortieren erlaubt, andernfalls nicht. Lassen Sie uns das anhand eines Beispiels für die Sortierung von Python-Strings zu JSON verstehen.

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.

Mitplex Objektkodierung von Python

Ein Complex Das heißt, das Objekt besteht aus zwei verschiedenen Teilen

  1. Realteil
  2. Imaginärer Teil

Mitplex Objektkodierung von Python

Beispiel: 3 +2i

Vor der Kodierung einer complex Objekt, müssen Sie überprüfen, ob eine Variable com istplex oder nicht. Sie müssen eine Funktion erstellen, die mithilfe einer Instanzmethode den in einer Variablen gespeicherten Wert überprüft.

Lassen Sie uns die spezifische Funktion für „Check Object is com“ erstellenplex oder zur Kodierung geeignet sind.

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]'

Mitplex JSON-Objektdekodierung in Python

Um com zu entschlüsselnplex Objekt in JSON, verwenden Sie einen object_hook-Parameter, der prüft, ob die JSON-Zeichenfolge die COM enthältplex Objekt oder nicht. Lassen Sie uns mit String zu JSON Python-Beispiel verstehen:

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 JSONEncoder-Klasse wird zur Serialisierung jedes Python-Objekts während der Codierung verwendet. Es enthält drei verschiedene Kodierungsmethoden

  • Standard(o) – In der Unterklasse implementiert und gibt ein Serialisierungsobjekt für zurück o Objekt.
  • kodieren(o) – Identisch mit JSON-Dumps. Die Python-Methode gibt einen JSON-String der Python-Datenstruktur zurück.
  • iterencode(o) – Stellen Sie die Zeichenfolge einzeln dar und kodieren Sie das Objekt o.

Mit Hilfe der Methode encode() der Klasse JSONEncoder können wir auch jedes Python-Objekt codieren, wie im folgenden Beispiel für einen Python-JSON-Encoder gezeigt.

# 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 JSONDecoder-Klasse wird zur Deserialisierung jedes Python-Objekts während der Decodierung verwendet. Es enthält drei verschiedene Dekodierungsmethoden

  • Standard(o) – In der Unterklasse implementiert und deserialisiertes Objekt zurückgeben o Objekt.
  • dekodieren(o) – Identisch mit der Methode json.loads(), die die Python-Datenstruktur einer JSON-Zeichenfolge oder -Daten zurückgibt.
  • raw_decode(o) – Stellen Sie das Python-Wörterbuch einzeln dar und dekodieren Sie das Objekt o.

Mit Hilfe der decode()-Methode der JSONDecoder-Klasse können wir auch JSON-Strings dekodieren, wie im folgenden Beispiel für einen Python-JSON-Decoder gezeigt.

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 lädt JSON aus einer Datei. Beispiel:

HINWEIS: – Stellen Sie sicher, dass die Anforderungsbibliothek bereits in Ihrem Python installiert ist. Wenn nicht, öffnen Sie Terminal oder CMD und geben Sie Folgendes ein

  • (Für 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 dem Dekodierungsvorgang. 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 lädt JSON aus einer Datei. 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")

JSON-Bibliothek in Python

Unendliche und NaN-Zahlen in Python

Das JSON Data Interchange Format (RFC – Request For Comments) lässt keinen Infinite- oder Nan-Wert zu, es gibt jedoch keine Einschränkung in der Python-JSON-Bibliothek, um Vorgänge im Zusammenhang mit Infinite- und Nan-Werten auszuführen. Wenn JSON den Datentyp INFINITE und Nan erhält, wird dieser in ein Literal 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 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 json
repeat_pair = '{"a":  1, "a":  2, "a":  3}'
json.loads(repeat_pair)

Ausgang:

{'a': 3}

CLI (Befehlszeilenschnittstelle) 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

Befehlszeilenschnittstelle mit JSON

$ 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 und Python zu 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-I/O 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
complex_obj = json.dumps(4 + 5j, default=complex_kodieren) Python Complex Objektkodierung in JSON
JSONEncoder().encode(colour_dict) Verwendung der JSONEncoder-Klasse für die Serialisierung
json.loads(data_string) Dekodieren von JSON-Strings im Python-Wörterbuch mit der Funktion json.loads()
json.loads('{“__complex__“: true, „real“: 4, „img“: 5}', object_hook = is_complex) Dekodierung von complex JSON-Objekt für Python
JSONDecoder().decode(colour_string) Verwendung der Dekodierung von JSON in Python mit Deserialisierung