Python JSON : encoder (vidages), décoder (chargements) et lire le fichier JSON
Qu'est-ce que JSON dans Python?
JSON in Python est un format standard inspiré de JavaScript pour l'échange et le transfert de données au format texte sur un réseau. En général, JSON est au format chaîne ou texte. Il peut être utilisé par les API et les bases de données, et il représente les objets sous forme de paires nom/valeur. JSON signifie JavaNotation d'objet de script.
Python Syntaxe JSON :
JSON est écrit sous forme de paire clé et valeur.
{ "Key": "Value", "Key": "Value", }
JSON est très similaire à Python dictionnaire. Python prend en charge JSON et dispose d'une bibliothèque intégrée en tant que JSON.
Bibliothèque JSON dans Python
»maréchal' et 'cornichon' modules externes de Python maintenir une version de JSON Python bibliothèque. Travailler avec JSON dans Python pour effectuer des opérations liées à JSON telles que l'encodage et le décodage, vous devez d'abord importer Bibliothèque JSON et pour cela dans votre py fichier,
import json
Les méthodes suivantes sont disponibles dans le JSON Python module
Méthode | Description |
---|---|
décharges() | encodage vers des objets JSON |
déverser() | chaîne codée écriture sur un fichier |
charges() | Décoder la chaîne JSON |
charge() | Décoder pendant la lecture du fichier JSON |
Python en JSON (encodage)
JSON Bibliothèque de Python effectue la traduction suivante de Python objets en objets JSON par défaut
Python | JSON |
---|---|
dicter | Exlcusion |
liste | tableau |
unicode | Chaîne |
nombre – entier, long | nombre – entier |
flotter | nombre – réel |
Vrai | Vrai |
Faux | Faux |
Aucun | Null |
Façonnage Python Les données au format JSON sont appelées une opération de codage. Le codage est effectué à l'aide de la méthode de la bibliothèque JSON – décharges()
Dumps JSON() dans Python
json.dumps () in Python est une méthode qui convertit les objets du dictionnaire de Python au format de données de chaîne JSON. Cela est utile lorsque les objets doivent être au format chaîne pour des opérations telles que l'analyse, l'impression, etc.
Exécutons maintenant notre premier exemple d'encodage json.dumps avec 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)
Sortie :
{"person": {"name": "Kenn", "sex": "male", "age": 28}})
Voyons un exemple de Python écrivez JSON dans un fichier pour créer un fichier JSON du dictionnaire en utilisant la même fonction déverser()
# 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)
Sortie :
Rien à montrer… Dans votre système, json_file.json est créé. Vous pouvez vérifier ce fichier comme indiqué dans l'écriture JSON ci-dessous dans le fichier Python Exemple.
JSON à Python (Décodage)
Le décodage de la chaîne JSON se fait à l'aide d'une méthode intégrée json.loads() & json.load() de la bibliothèque JSON dans Python. Ici, le tableau de traduction montre un exemple d'objets JSON à Python objets qui sont utiles pour effectuer le décodage dans Python de chaîne JSON.
JSON | Python |
---|---|
Exlcusion | dicter |
tableau | liste |
Chaîne | unicode |
nombre – entier | nombre – entier, long |
nombre – réel | flotter |
Vrai | Vrai |
Faux | Faux |
Null | Aucun |
Voyons une analyse de base JSON Python exemple de décodage à l'aide de json.charge fonction,
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'))
Sortie :
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}} Type of dict_obj <class 'dict'> Person...... {'name': 'John', 'sex': 'male'}
Décodage du fichier JSON ou analyse du fichier JSON dans Python
Maintenant, nous allons apprendre à lire le fichier JSON dans Python avec Python analyser l'exemple JSON :
NOTE: Le décodage du fichier JSON est une opération liée aux entrées/sorties de fichiers (E/S). Le fichier JSON doit exister sur votre système à l'emplacement spécifié que vous mentionnez dans votre programme.
Python lire le fichier JSON Exemple :
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)
Ici les données est un objet dictionnaire de Python comme indiqué dans le fichier JSON lu ci-dessus Python Exemple.
Sortie :
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Encodage compact dans Python
Lorsque vous devez réduire la taille de votre fichier JSON, vous pouvez utiliser un encodage compact dans Python.
Exemple,
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)
Sortie :
'["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 **
Formater le code JSON (Jolie impression)
- L’objectif est d’écrire du code bien formaté pour la compréhension humaine. Avec l’aide d’une jolie impression, n’importe qui peut facilement comprendre le code.
Exemple :
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)
Sortie :
{ "a" : 4, "b" : 5 }
Pour mieux comprendre cela, changez l'indentation en 40 et observez le résultat-
Commande du code JSON :
clés_tri attribut dans Python L'argument de la fonction dumps triera la clé dans JSON par ordre croissant. L'argument sort_keys est un attribut booléen. Lorsqu'il est vrai, le tri est autorisé, sinon non. Comprenons avec Python chaîne en exemple de tri JSON.
Exemple,
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)
Sortie :
{ "age": 45, "cars": [ { "model": "Audi A1", "mpg": 15.1 }, { "model": "Zeep Compass", "mpg": 18.1 } ], "children": [ "Alice", "Bob" ], "married": true, "name": "Ken", "pets": [ "Dog" ] }
Comme vous pouvez le constater, l'âge des clés, les voitures, les enfants, etc. sont classés par ordre croissant.
Codage d'objet complexe de Python
Un objet complexe comporte deux parties différentes qui sont
- Partie réelle
- Partie imaginaire
Exemple : 3 +2i
Avant d'effectuer l'encodage d'un objet complexe, vous devez vérifier qu'une variable est complexe ou non. Vous devez créer une fonction qui vérifie la valeur stockée dans une variable à l'aide d'une méthode d'instance.
Créons la fonction spécifique pour vérifier que l'objet est complexe ou éligible au codage.
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)
Sortie :
'[4.0, 5.0]'
Décodage d'objet JSON complexe dans Python
Pour décoder un objet complexe en JSON, utilisez un paramètre object_hook qui vérifie si la chaîne JSON contient l'objet complexe ou non. Voyons comment convertir une chaîne en JSON Python Exemple,
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)
Sortie :
Complex_object...... (4+5j) Without_complex_object...... {'real': 6, 'img': 7}
Présentation de la classe de sérialisation JSON JSONEncoder
La classe JSONEncoder est utilisée pour la sérialisation de tout Python objet lors de l’exécution de l’encodage. Il contient trois méthodes différentes de codage qui sont
- par défaut (o) - Implémenté dans la sous-classe et renvoie l'objet sérialisé pour o objet.
- encoder(o) – Identique aux dumps JSON Python la méthode renvoie la chaîne JSON de Python Structure de données.
- iterencode(o) – Représente la chaîne une par une et code l’objet o.
Avec l'aide de la méthode encode() de la classe JSONEncoder, nous pouvons également encoder n'importe quel Python objet comme indiqué ci-dessous Python Exemple d'encodeur JSON.
# 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)
Sortie :
'{"colour": ["red", "yellow", "green"]}'
Présentation de la classe de désérialisation JSON JSONDecoder
La classe JSONDecoder est utilisée pour la désérialisation de tout Python objet lors de l’exécution du décodage. Il contient trois méthodes différentes de décodage qui sont
- par défaut (o) – Implémenté dans la sous-classe et renvoie un objet désérialisé o objet.
- décoder(o) – Identique au retour de la méthode json.loads() Python structure de données d’une chaîne ou de données JSON.
- raw_decode(o) - Représenter Python dictionnaire un par un et décoder l'objet o.
Avec l'aide de la méthode decode() de la classe JSONDecoder, nous pouvons également décoder la chaîne JSON comme indiqué ci-dessous Python Exemple de décodeur JSON.
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)
Sortie :
{'colour': ['red', 'yellow']}
Décoder les données JSON à partir d'une URL : exemple réel
Nous récupérerons les données de CityBike NYC (Bike Sharing System) à partir de l'URL spécifiée (https://gbfs.citibikenyc.com/gbfs/2.3/gbfs.json) et convertissez-le au format dictionnaire.
Python charger JSON à partir du fichier Exemple :
REMARQUE : - Assurez-vous que la bibliothèque de requêtes est déjà installée dans votre Python, Sinon, ouvrez le Terminal ou CMD et tapez
- (Pour Python 3 ou ci-dessus) demandes d'installation de pip3
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])
Sortie :
<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': '' }
Exceptions liées à la bibliothèque JSON dans Python:
- Classe json.JSONDecoderError gère l'exception liée à l'opération de décodage. et c'est une sous-classe de ValeurErreur.
- Exception - json.JSONDecoderError(msg, doc)
- Les paramètres d'exception sont,
- msg – Message d'erreur non formaté
- doc – Documents JSON analysés
- pos – démarre l'index du document en cas d'échec
- lineno – les lignes non présentées correspondent à la position
- deux points – le numéro de colonne correspond à la position
Python charger JSON à partir du fichier Exemple :
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")
Infini et NaN Numbers in Python
Le format d'échange de données JSON (RFC – Request For Comments) n'autorise pas les valeurs infinies ou Nan, mais il n'y a aucune restriction dans Python- Bibliothèque JSON pour effectuer des opérations liées aux valeurs infinies et Nan. Si JSON obtient les types de données INFINITE et Nan, il les convertit en littéral.
Exemple,
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))
Sortie :
Infinity <class 'str'> NaN inf <class 'float'>
Clé répétée dans la chaîne JSON
RFC spécifie que le nom de la clé doit être unique dans un objet JSON, mais ce n'est pas obligatoire. Python La bibliothèque JSON ne déclenche pas d'exception pour les objets répétés dans JSON. Il ignore toutes les paires clé-valeur répétées et ne prend en compte que la dernière paire clé-valeur parmi elles.
- Exemple,
import json repeat_pair = '{"a": 1, "a": 2, "a": 3}' json.loads(repeat_pair)
Sortie :
{'a': 3}
CLI (Command Line Interface) avec JSON dans Python
json.tool fournit l'interface de ligne de commande pour valider la syntaxe JSON Pretty-Print. Voyons un exemple de CLI
$ echo '{"name" : "Kings Authur" }' | python3 -m json.tool
Sortie :
{ "name": " Kings Authur " }
Avantages de JSON dans Python
- Facile à revenir entre le conteneur et la valeur (JSON vers Python et Python en JSON)
- Objet JSON lisible par l'homme (joli-imprimé)
- Largement utilisé dans le traitement des données.
- N'a pas la même structure de données dans le fichier unique.
Limites de mise en œuvre de JSON dans Python
- Dans le désérialiseur de plage JSON et prédiction d'un nombre
- La longueur maximale de la chaîne JSON et des tableaux de JSON et les niveaux d'imbrication de l'objet.
Python Aide-mémoire JSON
Python Fonction JSON | Description |
---|---|
json.dumps (person_data) | Créer un objet JSON |
json.dump (person_data, file_write) | Créer un fichier JSON à l'aide des E/S de fichier de Python |
compact_obj = json.dumps(data, separators=(',',':')) | Compacter l'objet JSON en supprimant le caractère espace de l'objet JSON à l'aide d'un séparateur |
formatted_obj = json.dumps(dic, indent=4, separators=(',', ': ')) | Formatage du code JSON à l'aide de l'indentation |
sorted_string = json.dumps(x, indent=4, sort_keys=True) | Tri de la clé d'objet JSON par ordre alphabétique |
complex_obj = json.dumps(4 + 5j, par défaut=complex_encode) | Python Codage d'objets complexes en JSON |
JSONEncoder().encode(colour_dict) | Utilisation de la classe JSONEncoder pour la sérialisation |
json.loads (data_string) | Décoder la chaîne JSON dans Python dictionnaire utilisant la fonction json.loads() |
json.loads('{"__complex__" : vrai, "réel" : 4, "img" : 5}', object_hook = is_complex) | Décodage d'un objet JSON complexe en Python |
JSONDecoder().decode(colour_string) | Utilisation du décodage JSON pour Python avec désérialisation |