Python JSON: encoder (vidage), décoder (charger) les données json & Fichier (exemple)

Table des matières:

Anonim

Qu'est-ce que JSON?

JSON est un format standard d'échange de données, inspiré de JavaScript. Généralement, JSON est au format chaîne ou texte. JSON signifie J ava S cript O bjet N ottaison.

La syntaxe de JSON: JSON est écrite sous forme de paire clé et valeur.

{"Key": "Value","Key": "Value",}

JSON est très similaire au dictionnaire Python. Python prend en charge JSON et dispose d'une bibliothèque intégrée en tant que JSON.

Bibliothèque JSON en Python

Les modules externes ' marshal ' et ' pickle' de Python maintiennent une version de la bibliothèque JSON . Pour effectuer des opérations liées à JSON comme l'encodage et le décodage en Python, vous devez d'abord importer la bibliothèque JSON et pour cela dans votre fichier .py ,

import json

Les méthodes suivantes sont disponibles dans le module JSON

Méthode Description
décharges () encodage en objets JSON
décharger() chaîne codée écriture sur fichier
charges() Décoder la chaîne JSON
charge() 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 Déployer
unicode Chaîne de caractères
nombre - entier, long nombre - entier
flotter nombre - réel
Vrai Vrai
Faux Faux
Aucun Nul

La conversion de données Python en JSON s'appelle une opération d'encodage. L'encodage se fait à l'aide de la méthode de la bibliothèque JSON - dumps ()

La méthode dumps () convertit l'objet dictionnaire de python au format de données de chaîne JSON.

Nous allons maintenant effectuer notre premier exemple d'encodage avec Python.

import jsonx = {"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)

Production:

{"person": {"name": "Kenn", "sex": "male", "age": 28}})

Créons 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 operationwith open('json_file.json', "w") as file_write:# write json data into filejson.dump(person_data, file_write)

Production:

Rien à montrer

… Dans votre système, json_file.json est créé, vous pouvez vérifier ce fichier.

JSON en Python (décodage)

Décodage chaîne JSON est fait avec l'aide de la méthode encastrables charges () et 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 d'une chaîne JSON.

JSON Python
Objet dict
Déployer liste
Chaîne de caractères unicode
nombre - entier nombre - entier, long
nombre - réel flotter
Vrai Vrai
Faux Faux
Nul Aucun

Voyons un exemple basique de décodage en Python à l'aide de la fonction json.loads () ,

import json # json library imported# json data stringperson_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_objprint("Type of dict_obj", type(dict_obj))# get human object detailsprint("Person… ", dict_obj.get('person'))

Production:

{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}Type of dict_obj Person… {'name': 'John', 'sex': 'male'}

Décodage d'un fichier JSON ou analyse d'un fichier JSON en Python

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.

Exemple,

import json#File I/O Open function for read data from JSON Filewith open('X:/json_file.json') as file_object:# store file data in objectdata = json.load(file_object)print(data)

Ici, les données sont un objet dictionnaire de Python.

Production:

{'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 un encodage compact en Python.

Exemple,

import json# Create a List that contains dictionarylst = ['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 dictionarycompact_obj = json.dumps(lst, separators=(',', ':'))print(compact_obj)

Production:

'["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 ** 

Format du code JSON (Jolie impression)

  • Le but est d'écrire un code bien formaté pour la compréhension humaine. Avec l'aide d'une jolie impression, tout le monde peut facilement comprendre le code.
  • Exemple,
import jsondic = { '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)

Production:

{"a" : 4,"b" : 5}

Pour mieux comprendre cela, changez le retrait en 40 et observez la sortie-

Commande du code JSON:

L' attribut sort_keys dans l'argument de la fonction dumps () triera la clé dans JSON dans l'ordre croissant. L'argument sort_keys est un attribut booléen. Quand c'est vrai, le tri est autorisé sinon non

Exemple,

import jsonx = {"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)

Production:

{"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 observer l'âge des clés, les voitures, les enfants, etc. sont classés par ordre croissant.

Encodage d'objets complexes de Python

Un objet complexe a deux parties différentes qui sont

  1. Partie réelle
  2. Partie imaginaire

Exemple: 3 + 2i

Avant d'effectuer le codage 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 pour l'encodage.

import json# create function to check instance is complex or notdef complex_encode(object):# check using isinstance methodif isinstance(object, complex):return [object.real, object.imag]# raised error using exception handling if object is not complexraise TypeError(repr(object) + " is not JSON serialized")# perform json encoding by passing parametercomplex_obj = json.dumps(4 + 5j, default=complex_encode)print(complex_obj)

Production:

'[4.0, 5.0]'

Décodage d'objets JSON complexes 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. Exemple,

import json# function check JSON string contains complex objectdef 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 notcomplex_object =json.loads('{"__complex__": true, "real": 4, "img": 5}', object_hook = is_complex)#here we not passed complex object so it's convert into dictionarysimple_object =json.loads('{"real": 6, "img": 7}', object_hook = is_complex)print("Complex_object… ",complex_object)print("Without_complex_object… ",simple_object)

Production:

Complex_object… (4+5j)Without_complex_object… {'real': 6, 'img': 7}

Vue d'ensemble 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 de codage qui sont

  • default (o) - Implémenté dans la sous-classe et retourne l'objet de sérialisation pour l' objet o .
  • encode (o) - Identique à la méthode json.dumps () qui renvoie la chaîne JSON de la structure de données Python.
  • iterencode (o) - Représente la chaîne une par une et encode l'objet o.

Avec l'aide de la méthode encode () de la classe JSONEncoder, nous pouvons également encoder n'importe quel objet Python.

# import JSONEncoder class from jsonfrom json.encoder import JSONEncodercolour_dict = { "colour": ["red", "yellow", "green" ]}# directly called encode method of JSONJSONEncoder().encode(colour_dict)

Production:

'{"colour": ["red", "yellow", "green"]}'

Vue d'ensemble 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

  • default (o) - Implémenté dans la sous-classe et retourne l'objet o objet désérialisé .
  • decode (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ésente le dictionnaire Python un par un et décode l'objet o.

Avec l'aide de la méthode decode () de la classe JSONDecoder, nous pouvons également décoder la chaîne JSON.

import json# import JSONDecoder class from jsonfrom json.decoder import JSONDecodercolour_string = '{ "colour": ["red", "yellow"]}'# directly called decode method of JSONJSONDecoder().decode(colour_string)

Production:

{'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 de dictionnaire.

Exemple,

REMARQUE: - Assurez-vous que la bibliothèque de requêtes est déjà installée dans votre Python.Sinon, ouvrez Terminal ou CMD et tapez

  • (Pour Python 3 ou supérieur) demandes d'installation de pip3
import jsonimport requests# get JSON string data from CityBike NYC using web requests libraryjson_response= requests.get("https://feeds.citibikenyc.com/stations/stations.json")# check type of json_response objectprint(type(json_response.text))# load data in loads() function of json librarybike_dict = json.loads(json_response.text)#check type of news_dictprint(type(bike_dict))# now get stationBeanList key data from dictprint(bike_dict['stationBeanList'][0])

Production:

{'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:

  • La 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 - index de démarrage du document en cas d'échec
    • lineno - aucune ligne ne correspond à pos
    • deux points - la colonne no correspond à pos

Exemple,

import json#File I/O Open function for read data from JSON Filedata = {} #Define Empty Dictionary Objecttry: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 valueinfinite_json = json.dumps(float('inf'))# check infinite json typeprint(infinite_json)print(type(infinite_json))json_nan = json.dumps(float('nan'))print(json_nan)# pass json_string as Infinityinfinite = json.loads('Infinity')print(infinite)# check type of Infinityprint(type(infinite))

Production:

InfinityNaNinf

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 lève pas d'exception d'objets répétés dans JSON. Il ignore toutes les paires clé-valeur répétées et considère uniquement la dernière paire clé-valeur parmi elles.

  • Exemple,
import jsonrepeat_pair = '{"a": 1, "a": 2, "a": 3}'json.loads(repeat_pair)

Production:

{'a': 3}

CLI (Command Line Interface) avec JSON en 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

Production:

{"name": " Kings Authur "}

Avantages de JSON en Python

  • Facile à reculer entre le conteneur et la valeur (JSON vers Python et Python vers JSON)
  • Objet JSON lisible par l'homme (Pretty-print)
  • Largement utilisé dans la gestion des données.
  • N'a pas la même structure de données dans le fichier unique.

Limitation de l'implémentation de JSON en Python

  • Dans 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 des niveaux d'imbrication d'objet.

Cheat code

json.dumps (données_personne)

Créer un objet JSON

json.dump (données_personne, écriture_fichier)

Créer un fichier JSON à l'aide d'E / S de fichier de Python

compact_obj = json.dumps (données, séparateurs = (',', ':'))

Compacter un objet JSON en supprimant le caractère d'espace de l'objet JSON à l'aide d'un séparateur

formaté_obj = json.dumps (dic, retrait = 4, séparateurs = (',', ':'))

Formatage du 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, par défaut = complex_encode)

Encodage d'objets complexes Python dans JSON

JSONEncoder (). Encode (color_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'objet JSON complexe en Python

JSONDecoder (). Decode (chaîne_couleur)

Utilisation du décodage de JSON en Python avec désérialisation