Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Python

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)

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

  1. Pièce réelle
  2. 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

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

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

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 :

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.

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

Limites de la mise en œuvre de JSON en Python

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

  1. Types de données Python
  2. Opérateurs Python
  3. Instruction de passe Python
  4. Arguments de la fonction Python
  5. Dictionnaire Python
  6. E/S de fichier Python
  7. Java BufferedReader :comment lire un fichier en Java avec un exemple
  8. Python vérifie si le fichier existe | Comment vérifier si un répertoire existe en Python
  9. Python - Fichiers E/S