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.
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'}
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}}
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 }
Per capirlo meglio, cambia il rientro in 40 e osserva l'output-
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
- Parte reale
- Parte immaginaria
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")
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
$ 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 |