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.

Python Exemple d'encodage JSON

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

Python Exemple de décodage JSON

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}}

Analyse du fichier JSON dans Python

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
}

Formater le code JSON Exemple

Pour mieux comprendre cela, changez l'indentation en 40 et observez le résultat-

Formater le code JSON Exemple

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

  1. Partie réelle
  2. Partie imaginaire

Codage d'objet complexe de Python

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")

Bibliothèque JSON dans Python

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

Interface de ligne de commande avec JSON

$ 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