Python JSON: codifica (dump), decodifica (carica) e leggi file JSON

In cosa consiste JSON Python?

JSON in Python è un formato standard ispirato a JavaScript per lo scambio e il trasferimento di dati in formato testo su una rete. In genere, JSON è in formato stringa o testo. Può essere utilizzato da API e database e rappresenta oggetti come coppie nome/valore. JSON sta per JavaNotazione degli oggetti script.

Python Sintassi JSON:

JSON è scritto come coppia chiave-valore.

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

JSON è molto simile a Python dizionario. Python supporta JSON e ha una libreria integrata come JSON.

Libreria JSON in Python

'maresciallo' e 'salamoia' moduli esterni di Python mantenere una versione di JSON Python biblioteca. Lavorare con JSON in Python per eseguire operazioni correlate a JSON come la codifica e la decodifica, è necessario prima importare JSON e per questo nel tuo .py file,

import json

I seguenti metodi sono disponibili nel JSON Python modulo

Metodo Descrizione
discariche() codifica in oggetti JSON
dump () scrittura di stringhe codificate su file
carichi() Decodifica la stringa JSON
caricare() Decodifica durante la lettura del file JSON

Python in JSON (codifica)

JSON Biblioteca di Python esegue la seguente traduzione di Python oggetti in oggetti JSON per impostazione predefinita

Python JSON
detto Oggetto
stratagemma Italia
unicode Corda
numero – intero, lungo numero – int
galleggiante numero – reale
I veri I veri
Falso Falso
Nona Nullo

Conversione Python dati in JSON è chiamata operazione di codifica. La codifica viene eseguita con l'aiuto del metodo della libreria JSON – discariche()

JSON esegue il dump() in Python

json.dump() in Python è un metodo che converte gli oggetti del dizionario di Python nel formato dati stringa JSON. È utile quando è necessario che gli oggetti siano in formato stringa per operazioni come parsing, stampa, ecc.

Ora eseguiamo il nostro primo esempio di codifica json.dumps con 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)

Produzione:

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

Vediamo un esempio di Python scrivi JSON su file per creare un file JSON del dizionario utilizzando la stessa funzione 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)

Produzione:

Niente da mostrare... Nel tuo sistema viene creato json_file.json. Puoi controllare quel file come mostrato nella seguente scrittura JSON nel file Python esempio.

Python Esempio di codifica JSON

JSON a Python (Decodifica)

La decodifica delle stringhe JSON viene eseguita con l'aiuto del metodo integrato json.load() & json.load() della libreria JSON in Python. Qui la tabella di traduzione mostra un esempio di oggetti JSON in Python oggetti che sono utili per eseguire la decodifica Python di stringa JSON.

JSON Python
Oggetto detto
Italia stratagemma
Corda unicode
numero – int numero – intero, lungo
numero – reale galleggiante
I veri I veri
Falso Falso
Nullo Nona

Vediamo un'analisi di base JSON Python esempio di decodifica con l'aiuto di json.loads funzione,

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

Produzione:

{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Type of dict_obj <class 'dict'>
Person...... {'name': 'John', 'sex': 'male'}

Python Esempio di decodifica JSON

Decodifica del file JSON o analisi del file JSON in Python

Ora impareremo come leggere il file JSON Python con Python analizzare l'esempio JSON:

NOTA: La decodifica del file JSON è un'operazione relativa all'input/output del file (I/O). Il file JSON deve esistere sul tuo sistema nella posizione specificata menzionata nel tuo programma.

Python leggere il file JSON Esempio:

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)

Qui i dati è un oggetto del dizionario di Python come mostrato nel file JSON letto sopra Python esempio.

Produzione:

{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}

Analisi del file JSON in corso Python

Codifica compatta in Python

Quando è necessario ridurre le dimensioni del file JSON, è possibile utilizzare la codifica compatta in Python.

Esempio,

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)

Produzione:

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

Formato codice JSON (Pretty print)

  • Lo scopo è scrivere codice ben formattato per la comprensione umana. Con l'aiuto di una bella stampa, chiunque può facilmente comprendere il codice.

Esempio:

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)

Produzione:

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

Formato codice JSON Esempio

Per capirlo meglio, cambia il rientro in 40 e osserva l'output-

Formato codice JSON Esempio

Ordinazione del codice JSON:

sort_keys attributo in Python L'argomento della funzione dumps ordinerà la chiave in JSON in ordine crescente. L'argomento sort_keys è un attributo booleano. Quando è vero l'ordinamento è consentito altrimenti no. Cerchiamo di capire con Python esempio di ordinamento da stringa a JSON.

Esempio,

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)

Produzione:

{
    "age": 45,
    "cars": [ {
        "model": "Audi A1", 
        "mpg": 15.1
    },
    {
        "model": "Zeep Compass", 
        "mpg": 18.1
    }
    ],
    "children": [ "Alice",
		  "Bob"
	],
    "married": true,
    "name": "Ken",
    "pets": [ 
		"Dog"
	]
}

Come puoi osservare, l'età delle chiavi, le auto, i bambini, ecc. sono disposti in ordine crescente.

Codifica di oggetti complessi Python

Un oggetto complesso ha due parti diverse che sono

  1. Parte reale
  2. Parte immaginaria

Codifica di oggetti complessi Python

Esempio: 3+2i

Prima di eseguire la codifica di un oggetto complesso, è necessario verificare se una variabile è complessa o meno. È necessario creare una funzione che verifichi il valore memorizzato in una variabile utilizzando un metodo di istanza.

Creiamo la funzione specifica per verificare che l'oggetto sia complesso o idoneo per la codifica.

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)

Produzione:

'[4.0, 5.0]'

Decodifica complessa di oggetti JSON in Python

Per decodificare un oggetto complesso in JSON, usa un parametro object_hook che controlla se la stringa JSON contiene o meno l'oggetto complesso. Cerchiamo di capire con la stringa in JSON Python Esempio,

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)

Produzione:

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

Panoramica della classe di serializzazione JSON JSONEncoder

La classe JSONEncoder viene utilizzata per la serializzazione di qualsiasi file Python oggetto durante l'esecuzione della codifica. Contiene tre diversi metodi di codifica che sono

  • predefinito(o) – Implementato nella sottoclasse e restituisce l'oggetto serializza per o oggetto.
  • codificare(o) – Uguale ai dump JSON Python metodo restituisce la stringa JSON di Python struttura dati.
  • codice iter(o) – Rappresenta la stringa una per una e codifica l'oggetto o.

Con l'aiuto del metodo encode() della classe JSONEncoder, possiamo anche codificare any Python oggetto come mostrato di seguito Python Esempio di codificatore 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)

Produzione:

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

Panoramica della classe di deserializzazione JSON JSONDecoder

La classe JSONDecoder viene utilizzata per la deserializzazione di any Python oggetto durante l'esecuzione della decodifica. Contiene tre diversi metodi di decodifica che sono

  • predefinito(o) – Implementato nella sottoclasse e restituisce l'oggetto deserializzato o oggetto.
  • decodificare(o) – Uguale al metodo return json.loads() Python struttura dati della stringa o dei dati JSON.
  • decodifica_raw(o) – Rappresentare Python dizionario uno per uno e decodifica l'oggetto o.

Con l'aiuto del metodo decode() della classe JSONDecoder, possiamo anche decodificare la stringa JSON come mostrato di seguito Python Esempio di decodificatore 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)

Produzione:

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

Decodifica dei dati JSON dall'URL: esempio di vita reale

Recupereremo i dati di CityBike NYC (sistema di bike sharing) dall'URL specificato (https://gbfs.citibikenyc.com/gbfs/2.3/gbfs.json) e convertirli nel formato dizionario.

Python carica JSON dal file Esempio:

NOTA: - Assicurati che la libreria delle richieste sia già installata nel tuo Python, In caso contrario, apri Terminale o CMD e digita

  • (Per Python 3 o superiore) richieste di installazione 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]) 

Produzione:

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

Eccezioni relative alla libreria JSON in Python:

  • Classe json.JSONDecoderErrore gestisce l'eccezione relativa all'operazione di decodifica. ed è una sottoclasse di ValoreErrore.
  • Eccezione - json.JSONDecoderError(msg, doc)
  • I parametri di eccezione sono,
    • msg: messaggio di errore non formattato
    • doc: documenti JSON analizzati
    • pos – avvia l'indice del documento quando fallisce
    • lineno – la linea non mostrata corrisponde alla pos
    • due punti – la colonna n. corrisponde alla pos

Python carica JSON dal file Esempio:

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

Libreria JSON in Python

Infinito e NaN Numbers in Python

Il formato JSON Data Interchange Format (RFC – Request For Comments) non consente valori infiniti o Nan ma non esiste alcuna restrizione in Python- Libreria JSON per eseguire operazioni correlate a valori Infiniti e Nan. Se JSON ottiene il tipo di dati INFINITE e Nan, lo converte in letterale.

Esempio,

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

Produzione:

Infinity
<class 'str'>
NaN
inf
<class 'float'>	

Chiave ripetuta nella stringa JSON

RFC specifica che il nome della chiave deve essere univoco in un oggetto JSON, ma non è obbligatorio. Python La libreria JSON non solleva un'eccezione per oggetti ripetuti in JSON. Ignora tutte le coppie di valori-chiave ripetute e considera solo l'ultima coppia di valori-chiave tra di loro.

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

Produzione:

{'a': 3}

CLI (Interfaccia della riga di comando) con JSON in Python

json.tool fornisce l'interfaccia della riga di comando per convalidare la sintassi JSON piuttosto stampata. Vediamo un esempio di CLI

Interfaccia a riga di comando con JSON

$ echo '{"name" : "Kings Authur" }' | python3 -m json.tool

Produzione:

{
    "name": " Kings Authur "
}

Vantaggi di JSON in Python

  • Facile tornare tra contenitore e valore (da JSON a Python e dell' Python a JSON)
  • Oggetto JSON leggibile dall'uomo (pretty-print).
  • Ampiamente usato nella gestione dei dati.
  • Non ha la stessa struttura dati nel singolo file.

Limitazioni di implementazione di JSON in Python

  • Nel deserializzatore dell'intervallo JSON e nella previsione di un numero
  • La lunghezza massima della stringa JSON e degli array di JSON e i livelli di nidificazione dell'oggetto.

Python Foglio informativo JSON

Python Funzione JSON Descrizione
json.dumps(dati_persona) Crea oggetto JSON
json.dump(dati_persona, scrittura_file) Crea un file JSON utilizzando File I/O di Python
compact_obj = json.dumps(dati, separatori=(',',':')) Compatta oggetto JSON rimuovendo il carattere spazio dall'oggetto JSON utilizzando il separatore
oggetto_formattato = json.dumps(dic, indent=4, separatori=(',', ': ')) Formattazione del codice JSON utilizzando il rientro
sorted_string = json.dumps(x, indent=4, sort_keys=True) Ordinamento della chiave dell'oggetto JSON in ordine alfabetico
complex_obj = json.dumps(4 + 5j, predefinito=complex_encode) Python Codifica di oggetti complessi in JSON
JSONEncoder().encode(color_dict) Utilizzo della classe JSONEncoder per la serializzazione
json.loads(data_string) Decodifica della stringa JSON in Python dizionario utilizzando la funzione json.loads()
json.loads('{“__complex__”: vero, “reale”: 4, “img”: 5}', object_hook = is_complex) Decodifica di oggetti JSON complessi in Python
JSONDecoder().decode(stringa_colore) Utilizzo della decodifica JSON in Python con deserializzazione