Python JSON: codifica (dump), decodifica (carica) dati json & File (esempio)

Sommario:

Anonim

Cos'è JSON?

JSON è un formato standard per lo scambio di dati, ispirato a JavaScript. In genere, JSON è in formato stringa o testo. JSON sta per J ava S cripta O bject N flottazione.

La sintassi di JSON: JSON viene scritta come coppia chiave e valore.

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

JSON è molto simile al dizionario Python. Python supporta JSON e ha una libreria incorporata come JSON.

Libreria JSON in Python

I moduli esterni ' marshal ' e ' pickle' di Python mantengono una versione della libreria JSON . Per eseguire operazioni relative a JSON come la codifica e la decodifica in Python, devi prima importare la libreria JSON e per questo nel tuo file .py ,

import json

I seguenti metodi sono disponibili nel modulo JSON

Metodo Descrizione
discariche () codifica in oggetti JSON
discarica () stringa codificata scritta su file
carichi () Decodifica la stringa JSON
caricare() Decodifica durante la lettura del file JSON

Da Python a JSON (codifica)

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

Pitone JSON
dict Oggetto
elenco Vettore
unicode Corda
numero - int, lungo numero - int
galleggiante numero - reale
Vero Vero
Falso Falso
Nessuna Nullo

La conversione dei dati Python in JSON è chiamata operazione di codifica. La codifica viene eseguita con l'aiuto del metodo della libreria JSON - dumps ()

Il metodo dumps () converte l'oggetto dizionario di Python nel formato dati stringa JSON.

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

Produzione:

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

Creiamo un file JSON del dizionario usando la stessa funzione 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)

Produzione:

Niente da mostrare

... Nel tuo sistema viene creato json_file.json puoi controllare quel file.

Da JSON a Python (decodifica)

Decodifica stringa JSON è fatto con l'aiuto del metodo incorporati carichi () e load () della libreria JSON in Python. Qui la tabella di traduzione mostra un esempio di oggetti JSON in oggetti Python che sono utili per eseguire la decodifica in Python di stringhe JSON.

JSON Pitone
Oggetto dict
Vettore elenco
Corda unicode
numero - int numero - int, lungo
numero - reale galleggiante
Vero Vero
Falso Falso
Nullo Nessuna

Vediamo un semplice esempio di decodifica in Python con l'aiuto della funzione 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'))

Produzione:

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

Decodifica del file JSON o analisi del file JSON in Python

NOTA: la decodifica del file JSON è un'operazione correlata a File Input / Output (I / O). Il file JSON deve esistere sul tuo sistema nella posizione specificata che menzioni nel tuo programma.

Esempio,

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)

Qui i dati sono un oggetto dizionario di Python.

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

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

Formatta il codice JSON (bella stampa)

  • L'obiettivo è scrivere codice ben formattato per la comprensione umana. Con l'aiuto di una bella stampa, chiunque può facilmente capire il codice.
  • Esempio,
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)

Produzione:

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

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

Ordinare il codice JSON:

L' attributo sort_keys nell'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

Esempio,

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)

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 notare l'età delle chiavi, le auto, i bambini, ecc. Sono disposte in ordine crescente.

Codifica di oggetti complessi di Python

Un oggetto Complesso ha due parti diverse, ovvero

  1. Parte reale
  2. Parte immaginaria

Esempio: 3 + 2i

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

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

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)

Produzione:

'[4.0, 5.0]'

Decodifica di oggetti JSON complessa in Python

Per decodificare un oggetto complesso in JSON, utilizza un parametro object_hook che controlla che la stringa JSON contenga o meno l'oggetto complesso. Esempio,

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)

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 oggetto Python durante l'esecuzione della codifica. Contiene tre diversi metodi di codifica che sono

  • default (o) - Implementato nella sottoclasse e restituisce serializzare oggetto per o oggetto.
  • encode (o) - Come il metodo json.dumps () restituisce la stringa JSON della struttura dati Python.
  • iterencode (o) - Rappresenta le stringhe una per una e codifica l'oggetto o.

Con l'aiuto del metodo encode () della classe JSONEncoder, possiamo anche codificare qualsiasi oggetto Python.

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

Produzione:

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

Panoramica della classe di deserializzazione JSON JSONDecoder

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

  • default (o) - Implementato nella sottoclasse e restituisce un oggetto deserializzato o un oggetto.
  • decode (o) - Come il metodo json.loads () restituisce la struttura dati Python della stringa o dei dati JSON.
  • raw_decode (o) - Rappresenta il dizionario Python uno per uno e decodifica l'oggetto o.

Con l'aiuto del metodo decode () della classe JSONDecoder, possiamo anche decodificare la stringa 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)

Produzione:

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

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

Recupereremo i dati di CityBike NYC (Bike Sharing System) dall'URL specificato (https://feeds.citibikenyc.com/stations/stations.json) e li convertiremo in formato dizionario.

Esempio,

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

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

Produzione:

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

  • La classe json.JSONDecoderError gestisce l'eccezione relativa all'operazione di decodifica. ed è una sottoclasse di ValueError.
  • 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 no show corrisponde alla pos
    • due punti - la colonna non corrisponde alla pos

Esempio,

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

Numeri infiniti e NaN in Python

JSON Data Interchange Format (RFC - Request For Comments) non consente Infinite o Nan Value ma non ci sono limitazioni nella libreria Python-JSON per eseguire operazioni relative a Infinite e Nan Value. Se JSON ottiene INFINITE e il tipo di dati Nan, viene convertito in letterale.

Esempio,

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

Produzione:

InfinityNaNinf

Chiave ripetuta nella stringa JSON

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

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

Produzione:

{'a': 3}

CLI (Command Line Interface) 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 indietro tra contenitore e valore (da JSON a Python e da Python a JSON)
  • Oggetto JSON leggibile dall'uomo (piuttosto stampato)
  • Ampiamente utilizzato nella gestione dei dati.
  • Non ha la stessa struttura dati nel singolo file.

Limitazione dell'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.

Trucco

json.dumps (person_data)

Crea oggetto JSON

json.dump (person_data, file_write)

Crea file JSON utilizzando File I / O di Python

compact_obj = json.dumps (data, separators = (',', ':'))

Compatta oggetto JSON rimuovendo il carattere spazio dall'oggetto JSON utilizzando il separatore

formatted_obj = json.dumps (dic, indent = 4, separators = (',', ':'))

Formattazione del codice JSON utilizzando Rientro

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

Codifica di oggetti complessi Python in JSON

JSONEncoder (). Codifica (colour_dict)

Uso della classe JSONEncoder per la serializzazione

json.loads (data_string)

Decodifica della stringa JSON nel dizionario Python utilizzando la funzione json.loads ()

json.loads ('{"__ complex__": true, "real": 4, "img": 5}', object_hook = is_complex)

Decodifica di oggetti JSON complessi in Python

JSONDecoder (). Decode (colour_string)

Uso della decodifica di JSON in Python con deserializzazione