Python JSON :encoder (dumps), décoder (chargers) et lire le fichier JSON
Qu'est-ce que JSON en Python ?
JSON en Python est un format standard inspiré de JavaScript pour l'échange et le transfert de données sous forme de texte sur un réseau. Généralement, JSON est au format chaîne ou texte. Il peut être utilisé par les API et les bases de données et représente les objets sous forme de paires nom/valeur. JSON signifie JavaScript Object Notation.
Syntaxe Python JSON :
JSON est écrit sous la forme d'une paire clé-valeur.
{ "Key": "Value", "Key": "Value", }
JSON est très similaire à Dictionnaire python. Python prend en charge JSON et possède une bibliothèque intégrée en tant que JSON.
Bibliothèque JSON en Python
'maréchal ' et 'cornichon' les modules externes de Python maintiennent une version de JSON Bibliothèque Python. Travailler avec JSON en Python pour effectuer des opérations liées à JSON comme 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 module JSON Python
Méthode | Description |
---|---|
vidages() | encodage en objets JSON |
vidage() | écriture de chaîne encodée sur le fichier |
charges() | Décoder la chaîne JSON |
charger() | Décoder pendant la lecture du fichier JSON |
Python vers JSON (Encodage)
La bibliothèque JSON de Python effectue la traduction suivante des objets Python en objets JSON par défaut
Python | JSON |
---|---|
dict | Objet |
liste | Tableau |
unicode | Chaîne |
nombre – entier, long | nombre – entier |
flottant | nombre – réel |
Vrai | Vrai |
Faux | Faux |
Aucun | Nul |
La conversion de données Python en JSON est appelée une opération d'encodage. L'encodage est effectué à l'aide de la méthode de la bibliothèque JSON - dumps()
Dumps JSON() en Python
json.dumps() en Python est une méthode qui convertit les objets du dictionnaire de Python au format de données de chaîne JSON. C'est utile lorsque les objets doivent être au format chaîne pour les opérations telles que l'analyse, l'impression, etc.
Effectuons 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 d'écriture Python JSON dans un fichier pour créer un fichier JSON du dictionnaire en utilisant la même fonction 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)
Sortie :
Rien à montrer… Dans votre système json_file.json est créé. Vous pouvez vérifier ce fichier comme indiqué dans l'exemple ci-dessous d'écriture de JSON dans un fichier Python.
JSON vers Python (décodage)
Le décodage de chaîne JSON est effectué à l'aide de la méthode intégrée json.loads() &json.load() de la bibliothèque JSON en Python. Ici, le tableau de traduction montre un exemple d'objets JSON en objets Python qui sont utiles pour effectuer le décodage en Python de la chaîne JSON.
JSON | Python |
---|---|
Objet | dict |
Tableau | liste |
Chaîne | unicode |
nombre – entier | nombre – entier, long |
nombre – réel | flottant |
Vrai | Vrai |
Faux | Faux |
Nul | Aucun |
Voyons un exemple de base d'analyse JSON Python de décodage à l'aide de json.loads 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 en Python
Maintenant, nous allons apprendre à lire le fichier JSON en Python avec l'exemple Python parse JSON :
REMARQUE : Le décodage du fichier JSON est une opération liée à l'entrée/sortie de fichier (E/S). Le fichier JSON doit exister sur votre système à l'emplacement spécifié que vous mentionnez dans votre programme.
Python lit 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)
Voici les données est un objet dictionnaire de Python, comme indiqué dans l'exemple Python de fichier JSON lu ci-dessus.
Sortie :
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Encodage compact en Python
Lorsque vous devez réduire la taille de votre fichier JSON, vous pouvez utiliser l'encodage compact en 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 une 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 la sortie-
Commander le code JSON :
sort_keys L'attribut dans l'argument de la fonction Python dumps triera la clé dans JSON par ordre croissant. L'argument sort_keys est un attribut booléen. Quand c'est vrai, le tri est autorisé sinon non. Comprenons avec l'exemple de tri chaîne Python vers 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.
Encodage d'objet complexe de Python
Un objet complexe a deux parties différentes, c'est-à-dire
- Pièce 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 en utilisant une méthode d'instance.
Créons la fonction spécifique pour vérifier que l'objet est complexe ou éligible à l'encodage.
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 en Python
Pour décoder un objet complexe en JSON, utilisez un paramètre object_hook qui vérifie que la chaîne JSON contient ou non l'objet complexe. Comprenons avec la chaîne à l'exemple JSON Python,
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 objet Python lors de l'encodage. Il contient trois méthodes différentes d'encodage qui sont
- par défaut(o) – Implémenté dans la sous-classe et renvoie l'objet sérialisé pour o objet.
- encoder(o) – Identique à JSON dumps La méthode Python renvoie la chaîne JSON de la structure de données Python.
- iterencode(o) – Représenter les chaînes une par une et encoder l'objet o.
Avec l'aide de la méthode encode() de la classe JSONEncoder, nous pouvons également encoder n'importe quel objet Python comme indiqué dans l'exemple d'encodeur Python JSON ci-dessous.
# 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 objet Python lors 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 l'objet désérialisé o objet.
- décoder(o) – Identique à la méthode json.loads() qui renvoie la structure de données Python de la chaîne ou des données JSON.
- raw_decode(o) – Représenter le dictionnaire Python 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é dans l'exemple de décodeur Python JSON ci-dessous.
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écodage des données JSON à partir de l'URL :exemple réel
Nous allons récupérer les données de CityBike NYC (Bike Sharing System) à partir de l'URL spécifiée (https://feeds.citibikenyc.com/stations/stations.json) et les convertir au format dictionnaire.
Python charge JSON à partir du fichier Exemple :
REMARQUE :- Assurez-vous que la bibliothèque de requêtes est déjà installée dans votre Python. Si ce n'est pas le cas, ouvrez Terminal ou CMD et tapez
- (Pour Python 3 ou supérieur) requêtes d'installation pip3
import json import requests # get JSON string data from CityBike NYC using web requests library json_response= requests.get("https://feeds.citibikenyc.com/stations/stations.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 en Python :
- Classe json.JSONDecoderError gère l'exception liée à l'opération de décodage. et c'est une sous-classe de ValueError.
- Exception :json.JSONDecoderError(msg, doc)
- Les paramètres d'exception sont,
- msg – Message d'erreur non formaté
- doc – Docs JSON analysés
- pos – démarrer l'index du document en cas d'échec
- lineno - la ligne non présentée correspond à pos
- deux-points – aucune colonne ne correspond à pos
Python charge 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")
Nombres infinis et NaN en 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 la bibliothèque Python-JSON pour effectuer des opérations liées aux valeurs infinies et Nan. Si JSON obtient le type de données INFINITE et Nan, il le 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. La bibliothèque Python JSON ne génère pas d'exception d'objets répétés dans JSON. Il ignore toutes les paires clé-valeur répétées et ne considère 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 (interface de ligne de commande) avec JSON en Python
json.tool fournit l'interface de ligne de commande pour valider la syntaxe JSON joli-print. Voyons un exemple de CLI
$ echo '{"name" : "Kings Authur" }' | python3 -m json.tool
Sortie :
{ "name": " Kings Authur " }
Avantages de JSON en Python
- Retour facile entre le conteneur et la valeur (JSON vers Python et Python vers JSON)
- Objet JSON lisible par l'homme (joliment 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 la mise en œuvre de JSON en Python
- Dans le désérialiseur de la plage JSON et la 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.
Aide-mémoire Python JSON
Fonction JSON Python | 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 d'espace de l'objet JSON à l'aide du séparateur |
formatted_obj =json.dumps(dic, indent=4, separators=(‘,’, ‘:‘)) | Formater le code JSON à l'aide de l'indentation |
sorted_string =json.dumps(x, indent=4, sort_keys=True) | Trier la clé d'objet JSON par ordre alphabétique |
complex_obj =json.dumps(4 + 5j, default=complex_encode) | Encodage Python Complex Object en JSON |
JSONEncoder().encode(colour_dict) | Utilisation de la classe JSONEncoder pour la sérialisation |
json.loads(chaîne_données) | Décodage de la chaîne JSON dans le dictionnaire Python à l'aide de 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 en Python avec désérialisation |
Python
- Types de données Python
- Opérateurs Python
- Instruction de passe Python
- Arguments de la fonction Python
- Dictionnaire Python
- E/S de fichier Python
- Java BufferedReader :comment lire un fichier en Java avec un exemple
- Python vérifie si le fichier existe | Comment vérifier si un répertoire existe en Python
- Python - Fichiers E/S